Java流式IO
2015-08-16 17:16
411 查看
1. 流式IO结构
下图只给出了较为常用的IO流的类图结构
![](http://images0.cnblogs.com/blog2015/688670/201508/161606469738933.png)
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文件中所有文件内容的例子:
参考资料 《Java核心技术》
下图只给出了较为常用的IO流的类图结构
![](http://images0.cnblogs.com/blog2015/688670/201508/161606469738933.png)
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核心技术》
相关文章推荐
- Java基础—super和this关键字
- Spring事务传播特性实例解析
- java初始化顺序
- Java功底篇系列-03-一些位运算符你会如何理解?
- Java虚拟机详解02----JVM内存结构
- hdu1276 Java水果
- 记票统计(java版整理)
- Java IO (上)
- Spring(Struts、Hibernate优势 + Spring IOC、AOP + Spring实际开发过程)
- (1)java虚拟机概念和结构图
- 2015年华为提前招聘机试题--奇偶排序
- java 对新浪微博微博的发表时间解析
- Java parseInt_使用此方法得到的原始数据类型的一个特定的字符串
- Spring Web Flow 学习笔记(2)-流程的组件
- HW-IP合法性_Java
- Java学习学习之路0801<复习>(抽象类、日期Date、接口)
- 2015年华为提前招聘机试题--输出最大的三位数
- Eclipse 一直提示 loading descriptor for 的解决方法(转)
- Jedis存储Java对象--Java序列化为byte数组方式
- Hive启动报错无法找到class— java.lang.NoClassDefFoundError