第七章:输入输出

7.1流式输入输出

  • 两种基本流:InputStream(输入流), OutputStream(输出流)
  • 根据流相对于程序的另一个端点不同可分两类:
    • NodeStream(节点流/基层流):从特定源如磁盘文件或内存某区域进行读或写入
    • FilterStream(过滤流/中层流):使用其它的流作为输入源或输出目的地
  • 流式I/O类根据操作的数据类型(16位字符或8位字节)分成两个层次体系:
    1. 字节流:流中的数据以8位的字节为单位进行读写,一般用于处理图片、声音之类的二进制数据,以InputStream、OutputStream为基础类
    2. 字符流:流中的数据以16位字符为单位进行读写,专用于字符数据,处理文本文件,以Reader、Writer为基础类

1.字节流

  • InputStream方法
//基本read方法
int read()              //读一个字节返回, 如果到达流的末尾,则返回 -1
int read(byte[ ] )      // 将数据读入byte[], 返回读的字节数
int read( byte[], int offset, int length )void close( )                 //关闭流。自顶向下关闭Filter stream
int available()             //返回未读的字节数
long skip(long n)           // 跳过n个字节
boolean markSupported( )    //测试打开的流是否支持书签
void mark(int buf)          //标记当前流,并建立buf大小缓冲区
void reset( )               // 返回标签处

  • OutputStream方法
//三个基本的write( )方法
void write(int c)   // 写一个字节
void write(byte[ ]) // 写一个字节数组
void write(byte[ ], int offset, int length ) void close( )
void flush( ) // 强行将缓冲的输出数据写出

2.字符流

  • Reader和Writer是字符流的两个抽象父类

  • Reader的基本方法

int read();//读单个字符
int read(char cbuf[]);//读字符放入数组中
int read(char cbuf[], int offset, int length);//读字符放入数组的指定位置 void close( )                  //关闭流
long skip(long n)           // 跳过n个字符
boolean markSupported( )    //测试打开的流是否支持书签
void mark(int)              //标记当前流,并建立int大小缓冲区
void reset( )               // 返回标签处
boolean  ready()            //测试当前流是否准备好进行读

  • Writer的基本方法
int write(int c); // 写单个字符
int write(char cbuf[]);  // 写字符数组
int write(char cbuf[], int offset, int length);
int write(String str);
int write(String str, int offset, int length);void close( ) //关闭流
void flush( ) //强行写

  • 字节流与字符流的比较:Reader 和 InputStream以及Writer 与 OutputStream定义的API类似,但操作的数据类型不同
输入输出类型 流类型 描述
File FileReader FileWriter FileInputStream FileOutputStream 统称为文件流。对文件进行读、写操作
Buffering BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 在读入或写出时,对数据进行缓存,以减少I/O的次数

3.文件流

  • 文件流类包括:FileReader,FileWriter,FileInputStream,FileOutputStream

  • 创建文件流:常用文件名或File类的对象创建文件流

  • //通过文件字节流实现文件的复制
    import java.io.*;
    public class FileIn{public static void main(String args[]){File inputFile = new File("in.txt");File outputFile = new File("out.txt");FileInputStream IN = new FileInputStream(inputFile);FileOutputStream OUT  = new FileOutputStream(outputFile);int c;while((c = IN.read()) != -1){OUT.write(c);}IN.close();OUT.close();}
    }
    //通过文件字符流实现文件的复制
    import java.io.*;
    public class FileIn{public static void main(String args[]){FileReader IN = new FileReader("in.txt");FileWriter OUT  = new FileWriter("out.txt");int c;while((c = IN.read()) != -1){OUT.write(c);}IN.close();OUT.close();}
    }
    

4.缓存流

  • 包括BufferedInputStream/BufferedOutputStream类和BufferedReader/BufferedWriter类

  • 缓冲流就是为数据流设置一个专门用于传送数据的一块内存区域(缓冲区)

  • 缓存流把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出, 通过减少系统资源的读写次数来加快程序的执行(提高读写效率)

  • //基本方法
    int read()
    int read( byte[], int offset, int length )int write(int c)
    void write(byte[ ], int offset, int length )//BufferedReader增加readLine( ) 方法 ,该方法读一行字符返回
    //BufferedWriter增加newLine( ) 方法 ,该方法写一个行分隔符
    
  • 常用输入/输出流类:标准的输入/输出

    • Java通过System.in、System.out和System.err来实现标准输入输出和标准错误输出

    • 每当main方法被执行时,就自动生成System.in、System.out和System.err三个对象

    • Scanner sc = new Scanner (System.in);
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
      

7.2文件

  • File类用来操作文件和获得文件的信息,但不提供对文件数据读取的方法,这些方法由文件流提供

  • 创建文件流:常用文件名或File类的对象创建文件流

  • 提供对文件进行创建目录、创建临时文件、改变文件名、删除文件等操作
    提供获取文件信息的方法,如文件名、文件路径和文件长度等

  • //构造方法
    public File(String pathname)
    public File(String parent,String child)
    //访问文件对象
    public String getName( )
    public String getPath( )
    public String getAbsolutePath( )
    public String getParent( )
    public File getParentFile( )
    //文件操作
    public boolean renameTo(File  dest)
    public boolean delete()
    //获得文件的属性
    public long length()
    public boolean exists()
    public long lastMoidfied()
    //目录操作
    public boolean mkdir()//创建目录
    public String[ ] list()
    public File[ ] listFiles()
    

7.3随机存储文件

  • 在文件的任意位置读或写数据,而且可以同时进行读和写的操作。RandomAccessFile类提供的对文件随机访问方式

  • //构造方法
    public RandomAccessFile(File file,String mode) throws FileNotfoundException
    public RandomAccessFile(String name,String mode) throws FileNotfoundException
    

7.4对象串行化

  • 把对象保存到外存,称为永久化

  • 实现java.io.Serializable接口类的对象可以被输入/输出

  • 只有对象的数据被保存,方法与构造方法不被保存(Serializable接口是个空接口,它只是一个表示对象可以串化的特殊标识

  • transient关键字标记的数据不被保存,声明暂时性变量

  • public class MyClass implements Serializable {public transient Thread myThread ;private transient String customerID;private int total;…
    }
    

JAVA语言程序设计第七章相关推荐

  1. Python语言程序设计第七章 - 组合数据类型 - 6.1

    目录 Python语言程序设计第七章 - 组合数据类型 集合运算 集合的关系 集合综合练习 元组元素抓7 元组解包 升序降序 截取部分元素 判断元素书否在列表中存在 头尾对调 翻转列表 指定元素对调 ...

  2. java语言程序设计第六章答案_Java语言程序设计(邵丽萍编著)第六章.doc

    Java语言程序设计(邵丽萍编著)第六章 第6章 (一)判断题 (1)抽象类不能实例化. ( ) (2)一个类中,只能拥有一个构造方法. ( ) (3)内部类都是非静态的. ( ) (4)接口中的所有 ...

  3. esp8266接收到的数据如何存放到数组中_愉快地学Java语言:第七章 数组

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  4. java语言程序设计第六章答案_Java语言程序设计(一)课后习题第六章(附答案)

    六.重载与多态 1.判断:接口中的所有方法都没有被实现.() 2.方法重载是指 ( ) A.两个或两个以上的方法取相同的方法名,但形参的个数或类型不同 B.两个以上的方法取相同的名字和具有相同的参数个 ...

  5. c语言程序设计 第七章函数,《C语言程序设计》第七章随堂练习:自定义函数

    题目:创建一个C语言控制台程序,除了main函数外,自定义两个被调用的函数,并要求至少有一个函数包含有参数. 解答: 首先我们要了解,函数包含哪些组成结构,有四个部分,分别是:函数类型.函数名称.函数 ...

  6. C语言设计第七章答案,c语言程序设计第七章答案

    [问答题,简答题] 从流体力学的角度研究密封,必须解决哪两个问题? [单选] 活塞环的密封原理是(). [单选] 活塞环的密封原理是(). [单选] 在装填软填料时,若软填料环数为8环,则装填时切口应 ...

  7. 辽宁自考 Java语言程序设计 课程代码 01019 备考整理(四)

    Java语言程序设计 备考整理 因教材过于陈旧建议仅作复习使用 Java语言程序设计 第8章 图形用户界面 Swing类的层次结构 容器 窗口容器 对话框容器 面板容器 组件 组件布局管理 顺序布局管 ...

  8. 辽宁自考 Java语言程序设计 课程代码 01019 备考整理(一)

    Java语言程序设计 备考整理 因教材过于陈旧建议仅作复习使用 Java语言程序设计 第1章 Java快速入门 1.1 Java简介: 1.2 Java的开发环境与运行环境: 1.3 初步了解Java ...

  9. 《Java语言程序设计与数据结构》编程练习答案(第七章)(一)

    <Java语言程序设计与数据结构>编程练习答案(第七章)(一) 英文名:Introduction to Java Programming and Data Structures, Comp ...

最新文章

  1. Android --- SharedPreferences的详细介绍
  2. Nginx部署及综合应用
  3. Suse 12 安装VMware tool
  4. 表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸
  5. [转载] java中对数组进行排序_如何在Java中对数组排序
  6. 《上海悠悠接口自动化平台》-5.测试计划与定时任务
  7. mysql 单元测试_优学院MySQL数据库设计单元测试答案
  8. windows64位PowerDesigner下载
  9. 【Java】线程插队
  10. 【资源管理器老是重启 win7资源管理器重启的解决办法】
  11. nc361t支持的服务器,使用5760/3850 WLC的外部RADIUS服务器EAP身份验证配置示例
  12. 值得收藏的12款小众冷门但功能强大的在线神器
  13. [渝粤教育] 中国地质大学 大学物理(上) 复习题
  14. 手动实现李群SE(3)到李代数se(3)之间的对指数运算关系
  15. 腾讯企业邮箱HTTPS设置
  16. Java+JVM+MySQL+数据结构与算法,一文说清!
  17. java jwt 用户认证_jwt身份验证
  18. 经验:企业选择ERP管理系统五大方法
  19. Unity firebase报错System.TypeInitializationException: The type initializer for Firebase.Editor.Measu
  20. 淘宝限制词维护+小技巧,优化限制词,降低被投诉概率!

热门文章

  1. 适配B2主题的WordPress外链跳转插件AnyLink
  2. 取消UltraEdit查看网页源文件
  3. cadence allegro学习记录(二)
  4. Flask视图、模板、模型
  5. 汽车导航系统背景介绍(zz)
  6. 服务器的智能监控管理结束,HART智能仪表在线监控系统的设计与实现
  7. python和cc哪个适合做游戏的背景音乐_适合做游戏的背景音乐
  8. print(f‘‘)的用法
  9. java quartz 停止_quartz定时程序无故停止并且没有错误
  10. 曲线绕y轴旋转一周所得旋转体体积_由曲线y=x,x=1,x=2,x轴围成的图形绕x轴旋转一周所得旋转体的体积是______.-数学-魔方格...