java 流的本质是数据传送的管道,java 中利用流实现外部数据的交互
文本文件
1。以字符形式存储的文件
2. 文本文件可见( 存储起,键盘输入的都是文本文件)
3。文本文件需要转化, 也就是说从键盘中输入的字符星数据,药转化为二进制数据才能存储到内存里面。 而内存的二进制数据也要转化到字符星数据才能在屏幕显示
二进制文件
1.以内存的方式存储
2.不可见传输效率高
基本字节流
1.文件字节流
2.网络字节流
3.标准字节流
InputStream 抽象类
int read()l 从输入流中读取一个字节,形成 0-255之间的整形返回
随机流
也就是FIle 流
文件字节流
为了防止意外,输出流应该刷空(flash())
套接流 ##
data流:
嵌入流,放入网络流的实话,可以一次处理一个字符串,并且恶意对字符进行编码
对象流
持续性: 把对象文件状态进行传送,接收者可以通过接收的状态从而创建对象
序列化:对象通过写出描述自己转台的数字莱记录表自己的过程叫串行化(序列化)
反序列化: 生成对象 (反序列化)
1.实现串行化协议()implemenets Serializable
2 。存放的文件只能是二进制文件 new FileOutputStream ("as.data");
3. 嵌入 对象输出流 out = new ObjectOutputStream (new FileOutputStream ("as.data"));
4. 写入 : out.write(对象的引用实例化)
5.反序列化:Student t = (Student)in.readObject();
反射创建对象
管道流
1. 输入流和输出流首尾相接
2
. 创建:
1.在构造方法中连接: PipedInputStream pis = new PipedInputStream(); //管道输入流对象
PipedOutputStream pos = new PipedOutputStream(pis); //管道输出流 。参数是输入流对象,结果便是首位相连
顺序输入流
当输入流太多的时候,一个个读取太麻烦,所以出现了SequenceInputStream 可以几个输入连接起来,像是一个比较长的流而已 ,让代码更简洁:
FileInputStream f1,f2;
String s;
f1 = new FileInputStream(“file1.txt”);
f2 = new FileInputStream(“file2.txt”);
SequenceInputStream fs = new SequenceInputStream(f1, f2);
DataInputStream ds = new DataInputStream(fs);
while( (s = ds.readLine()) != null )
System.out.println(s);
以上都是字节流
字符流
因为一个个字节读取效率太满。所以出来了字符流 字符流的使用需要考虑编码
如果读取的字符流不是来自本地时(比如网上某处与本地编码方式不同的机器),那么在构造字符输入流时就不能简单地使用缺省编码规范,而应该指定一种统一的编码规范“ISO 8859_1(国际)”,这是一种映射到ASCII码的编码方式,能够在不同平台之间正确转换字符。UTF-8 (国内)
InputStreamReader ir = new InputStreamReader( is, “8859_1” ); //国际
字符流不能处理二进制文件,只能处理文本文件