前言: 上一篇博客,博主主要讲解了File类的相关知识,File类它主要是对于文件和目录的相关 *** 作,却不能对于文件中的数据进行 *** 作。所以java中IO流主要对于数据 *** 作,将数据分为了:
- 输入流:读数据;
- 输出流:写数据;
按数据类型分为: - 字节流:
字节输入流;字节输出流; - 字符流:
字符输入流;字符输出流;
首先字节流是万能的,可以对任意类型文件进行读写。
主要分为字节输入流和输出流:
InputStream为所有输入字节流的超类,已知的子类都以该类为后缀;(将已经有的文件数据读取出来)。
OutputStream为所有输出字节流的超类,已知的子类都以该类为后缀;(主要用于将读取的数据输出到文件)。
OutputStream属于抽象基类,主要是通过子类的形式进行写数据。
FileOutStream类属于OutputStream类的子类,通过文件输出流用于将数据写入File。
其构造方法:FileOutputStream(String name):创建文件输出流以指定的名称写入文件。
使用字节输出流写数据的步骤:
- 创建字节输出流对象(这里创建字节输出流对象,是系统进行了创建了文件,并由字符输出流去指向该文件,在调用字节输出流对象在文件下进行写数据)。
- 调用字节输出流对象的写数据方法。
- 释放资源(关闭此文件输出流释放与此流相关联的任何系统资源) (重中之重!!)。
写数据的三种方式
其中第二个可以通过字符串的getByte()的方法将字符串转换为字节数组进行。第三个是将指定的字节数组的索引开始,len则是输入的数量。
补充说明
主要事项:当你运用字节流来读取数据时,要小心换行符,其换行符也会占领一个字节,不同系统的换行符也不一样。
字节流读数据主要通过FileInputStream类进行,继承于InputStream类,(输入流,主要用于读取数据)。
读取方式:
当读取的数据末尾后,在读取则返回-1;其中read()返回值为读取的字节的ascall值。read(byte[] b)返回值为每次读取的字节数;
(一次读一个字节数组)代码展示:
byte[] bys = new byte[1024]; //1024及其整数倍 int len; while ((len=fis.read(bys))!=-1) { System.out.print(new String(bys,0,len)); }//通过int read(Byte[] byte)的形式进行 //其中byte的数组长度决定了每次读取文件字节的个数 //返回为读取的字节个数。读到末尾,返回-1;4.字节缓冲流
BufferOutputStream:
该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必每个字节就调用底层系统。
BufferInputStream:
创建BufferInputStream将创建一个内部缓冲区数组,当从流中读取或者跳过字节时,内部缓冲区将根据需要从包含的输入流中重新填充,一次很多字节。
构造方法
字节缓冲输出流
BufferOutputStream(OutputStream out);
字节缓冲输入流
BufferInputStream(IntputStream In);
其原因(因为字节缓冲流只是提供一个缓冲区域来提高效率,然而其真正的 *** 作是需要在字节流区实现的,所以所需要参数为字节流)。
四种不同读写数据的比较:
其中字节缓冲流一次读写一个字节数组耗时最少。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)