码迷,mamicode.com
首页 > 编程语言 > 详细

Java流式IO

时间:2015-08-16 18:14:04      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

1. 流式IO结构

  下图只给出了较为常用的IO流的类图结构

 

技术分享

 

  Java的IO流主要分为两大类:字节流和字符流,字节流以InputStream和OutputStream为基础类,字符流以Reader和Writer为基础类。

 

2. 字节流

  字节流以InputStream和OutputStream为基础类,常用的子类流有:

  FileInputStream和FileOutputStream用于从文件读写二进制数据;

  FilterInputStream和FilterOutputStream即过滤流,过滤流可以嵌套基本二进制输入输出流或者其他过滤流,增强处理输入输出流的处理能力。其中BufferedInputStream和BufferedOutputStream流提供了读写缓冲的功能,DataInputStream和DataOutputStream提供了对字节流读写的更多支持(如:读写二进制整数等);

     ObjectInputStream和ObjectOutputStream用于读写对象,对象所属的类需要实现Serializable接口,现在更常用的方式应该是使用JSON格式来传递对象;

  读写二进制文件通常使用如下嵌套流的方式:

  new DataInputStream(new BufferedInputStream(new FileInputStream(new File(filename))));

  new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File(filename))));

 

3.字符流

  字符流以Reader和Writer为基础类,常用的子类有:

  FileReader和FileWriter类用于从文件读写文本数据;

  BufferedReader和BufferWriter用于读写文本数据,提供了读写缓冲的功能,通常用于包装其他的字符输入输出流;

  BufferedReader类中常用的方法是readLine读入一行数据,然后使用String类的相关API处理,更常用的方式是使用java.util.Scanner类来对读字符流提供更多支持;

      PrintWriter类对写字符流提供了更多支持;

  读写文本文件通常使用如下嵌套流的方式:

  new BufferedReader(new FileReader(new File(...));

  new PrintWriter(new BufferedWriter(new FileWriter(new File(...))));

 

4. 字节流和字符流的转换

   字节流转换成字符流使用InputStreamReader:

  new BufferedReader(new InputStreamReader(inputStream));

   字符流转换成字节流使用OutputStreamWriter:

  new BufferedWriter(new OutputStreamWriter(outputStream));

 

5. ZIP文件输入输出流

  Java中提供了对zip压缩文件读写支持,相关类在java.util.zip包中。

  ZipInputStream类和ZipOutputStream分别继承成自java.io.FilterInputStream类和java.io.FilterOutputStream类,用于读写zip压缩文件。

  ZipEntry类用于表示zip文件中的一个条目,读写zip文件,首先创建ZipInputStream或者ZipOutputStream,然后使用getNextEntry方法获取zip文件中的每个被压缩的文件,依次处理,每个处理完成一个条目之后,调用closeEntry方法关闭当前条目,处理完整个zip文件后,调用close方法关闭整个zip文件。

  下面给出一个依次打印zip文件中所有文件内容的例子:

ZipInputStream zin = new ZipInputStream(new FileInputStream("test.zip"));
ZipEntry zipEntry;
Scanner scanner;

while( (zipEntry = zin.getNextEntry() ) != null )
{
    scanner = new Scanner(zin);
    System.out.println(zipEntry.getName());   //输出文件名称
    //输出文件内容
    while(scanner.hasNextLine())
    {
        System.out.println(scanner.nextLine());
    }
    zin.closeEntry();
}

zin.close();

 

Java流式IO

标签:

原文地址:http://www.cnblogs.com/jqctop1/p/4734625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!