java中数据流_java中IO-数据流的归纳总结

--书中总结而来

1.数据操作流:

在IO包中,且与平台无关的数据流,包括数据输入流(DataInputStream)和数据输出流(DataOutputStream).

2.压缩流:

经常用到WinZip和WinRar,zip是一种常用的压缩格式,需导入java.util.zip包,可以用此包中的Zip,ZipOutputStream,ZipInputStream,ZipEntry几个类完成操作。

3.字节流:

字节流主要操作byte类型数据,以byte数组为例,主要操作类是OutputStream和InputStream类;此类都是抽象类,若是要使用此类就需要通过其子类实例化,比如要操作文件,可以使用FileOutputStream和FileInputStream类,用FileOutputStream类为OutputStream类实例化,然后进行操作。如下所示:

OutputStream out=new

FileOutputStream(f);//通过子类实例化OutputStream类

若是在操作文件写入时,要追加内容可以在实例化时设置追加参数为:true,增加换行操作为:\r\n

读取内容的类为:FileInputStream类,通过read读取内容,通过write来写入内容。

4.字符流:

在程序中一个字符等于两个字节,java专门提供了Reader和Writer类来专门操作字符流。

字符输入流Reader:用来读取数据

可以使用FileReader来实例化Reader,通过read(c)来获取字符串的长度

int len=r.read(c);

new String(c,0,len);

字符输出流Writer:用来写入数据

此类也是一个抽象类,可通过子类在实例化,例如:Writer w=new FileWriter(f);

使用此类可以在写入时只用写入字符串:w.writer(str);而不用把字符串变为byte数组再进行写入操作。

字节与字符流的区别:

字节流在操作时本身不会用到缓冲区(内存),是文件本身进行操作的;而字符流在操作时是使用缓冲区,通过缓冲区在操作文件,可以通过写入文件后不关闭输出流来进行测试,会发现,在使用字节流写入文件后,不使用close()关闭输出流,可以在文件中正常看见写入的数据。而使用字节流对文件进行写入数据后,如果最后没有关闭即close()方法调用,就会发现文件中没有显示写入的数据。这是因为使用字符流进写入时,写入的数据时写到缓冲区中,而不使用close()方法,缓冲区没满,不会把缓冲区的内容写入到文件中,故在文件中就不会显示要写入的数据。可以使用flush():刷新缓冲区,把缓冲区的内容强制写入到文件中。

在开发中,由于计算机识别的是二进制数据,而所有文件在硬盘中的存储方式都是二进制形式,所以字节流应用更广泛一些。

缓冲区是一段内存区域--一段特殊的内存。比如,一段程序频繁的调用一段代码,为了提升性能,就可以把此内容暂时读取到一段内存中,以后直接从此区域中读取数据即可,因为读取内存中的数据时速度较快,这样可以提升程序的性能。在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存中,所以使用了缓冲区暂存数据。

4.转换流:

有OutputStreamWriter和InputStreamReader类

OutputStreamWriter:将输出的字节流变为字符流,即将一个字节流的输出变为字符流输出对象。是Writer子类

InputStreamReader:是Reader子类,将输入的字节变为字符流。即将一个字节流的输入对象转为字符流对象

例如:

Writer w=new OuputStreamWriter(new

FileOutputStream(f));//将字节流变为字符流

Reader r=new InputStreamReader(new FileInputStream(f));

5.打印流:

打印流是输出信息最为方便的类,主要包含字节打印流(PrintStream)和字符打印流(PrintWriter),可以打印任何数据。

实例如下所示:

PrintStream ps=new PrintStream(new

FileOutputStream(f));//向文件中打印数据

System.in:键盘标准输入

6.BufferedReader类:用于从缓冲区中读取内容

BufferedReader类中的构造方法只接收字符输入流的实例,所以必须使用字符输入流和字节输入流的转换流InputstreamReader将字节输入流System.in转换为字符流。

实例如下所示:

BufferedReader buf=new BufferedReader(new

InputStreamReader(System.in));

System.in:输入的是字节流

InputStreamReader:用于把字节流转换为字符流

BufferedReader:用于从缓冲区中读取数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值