黑马程序员技术交流社区

标题: IO流总结(二) [打印本页]

作者: sunke1229    时间: 2016-7-20 23:20
标题: IO流总结(二)
本帖最后由 sunke1229 于 2016-7-20 23:22 编辑

流使用后一定要释放资源
流使用后一定要释放资源
流使用后一定要释放资源
流使用后一定要释放资源

流按流向分为两种:输入流,输出流。
流按操作类型分为两种:字节流,字符流


字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流 : 字符流只能操作纯字符数据,比较方便。
字节流的抽象父类: InputStream   OutputStream
字符流的抽象父类:Reader     Writer        

常见流
FileInputStream       FileOutputStream    文件流字节流
**FileOutputStream fos = new FileOutputStream("bbb.txt",true);  追加
int read(byte[] b):一次读取一个字节数组    缓冲流的根本
write(byte[] b):一次写出一个字节数组   缓冲流的根本


BufferedInputStream    BufferOutputStream  缓冲字节流


FileReader       FileWriter 文件字符流
BufferedReader    BufferedWriter   缓冲字符流
BufferedReader 的readLine()
BufferedWriter 的newLine()  写出一个换行


LineNumberReader    行号字符流(只有读,没有Writer)
getLineNumber()和setLineNumber()获取行号  

InputStreamReader   OutputStreamWriter    字符字节转换流(将字节流通过包装转换为字符流)
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK"));


SequenceInputStream序列输入流(只有读,没有OutputStream)
SequenceInputStream sis = new SequenceInputStream(fis1, fis2);        //将两个流整合成一个流
将n个流拼成一个流
  1. FileInputStream fis1 = new FileInputStream("a.txt");        //创建输入流对象,关联a.txt
  2.                 FileInputStream fis2 = new FileInputStream("b.txt");        //创建输入流对象,关联b.txt
  3.                 FileInputStream fis3 = new FileInputStream("c.txt");        //创建输入流对象,关联c.txt
  4.                 Vector<InputStream> v = new Vector<>();                                        //创建vector集合对象
  5.                 v.add(fis1);                                                                                        //将流对象添加
  6.                 v.add(fis2);
  7.                 v.add(fis3);
  8.                 Enumeration<InputStream> en = v.elements();                                //获取枚举引用
  9.                 SequenceInputStream sis = new SequenceInputStream(en);        //传递给SequenceInputStream构造
复制代码

ByteArrayOutputStream   ByteArrayInputStream   这个不需要close
该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
ps:个人感觉就是一个字节数组。。。。


ObjecOutputStream    ObjectInputStream  对象输入输出流(将对象序列化和反序列化)
writeObject()  readObject()
要写出的对象必须实现Serializable接口才能被序列化


PrintStream字节打印流
PrintWriter字符打印流
只有输出流  没有输入流  println()方法

System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据


DataInputStream  DataOutputStream   可以按照基本数据类型大小读写数据

流使用后一定要释放资源
流使用后一定要释放资源
流使用后一定要释放资源
流使用后一定要释放资源

IO.jpg (59.71 KB, 下载次数: 6)

IO.jpg

作者: 自娱自乐的朋朋    时间: 2016-7-21 00:04
一直搞不懂这个 继续看
作者: 呆呆的小呆    时间: 2016-7-21 01:14
66666666666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2