流的概念:
1、流就像一根管道,两边接着不同的容器,通过这个管道就可以读入或者读取容器的数据。
比如:文件输入流,FileInputStream 可以将指定文件中内容读取到程序中。
注意:字节数组输出流 ByteArrayOutputStream 他自带缓冲区,API中提到
protected | buf 存储数据的缓冲区。那么这个流所接着一头的容器就是这个字节数组 |
他的public byte[] toByteArray()方法,以 byte 数组的形式返回此输出流的当前内容。
这样就可以将一个Double型转换成字节数组
//字节数组输出流
ByteArrayOutputStream bos= new ByteArrayOutputStream();
//包装
DataOutputStream dos = new DataOutputStream(bos);
//写入整形
dos.writeInt(2000);
//得到字节数组
byte[] bs = bos.toByteArray();//bos 被嵌套了之后,他任然可以调用方法对流操作
//字节数组输入流
ByteArrayInputStream bis = new ByteArrayInputStream(bs);
DataInputStream dis = new DataInputStream(bis);
//以整数的形式读取出来
System.out.println(dis.readInt());
2、流的分类:
节点流和处理流
节点流:直接操作数据,他连接着两头的容器
处理流:嵌套在节点流上,增加节点流的功能,使得使用更加方便。
处理流必须嵌套在节点流之上,但是它没有改变管道的指向,管道还是连接原来的容器
节点流被嵌套之后任然可以调用自己的方法操作流(前面代码已经提到)
3、输入输出都是相对于程序而言,如果对于这个程序而言数据是写入那么就是输入流,反之输出流。
4、自己的理解:
对于数据,如果要保证数据正确,那么
(1、)我们在写入时,必须按照他的正确形式写入,别double、string
(2、)我们在读取的时候,读取的顺序和写入的顺序,已经形式读必须一致,因为数据就是10001001010
必须按照顺序来,先写的先读取
对象序列化,也是一样
(3、)在写入时要注意是接着写在后面,还是清空原来的重新写入
(4、)注意流的刷新缓冲区,流的关系顺序,先开的后关闭。
(5、)配置文件
Properties p = new Properties();
FileInputStream fis = new FileInputStream("d:/a.properties");
p.load(fis);//加载流中的配置内容
String font_size = p.getProperty("font-size");
String font_color = p.getProperty("font-color");
String font_family = p.getProperty("font-family");