io数据流笔记

io(input /output)java.io.*下
BIOS(基本输入输出系统)
程序是运行在内存中JAVA程序需要和它所运行的内存之外的节点相互传递数据就是要使用IO
JAVA与其他节点间互换数据使用的通道
JAVA流的分类
1.方向来分
2.输入流
3.输入流

(2)传输的内容来分
字节流:(一个字节一个字节传输)把中文字拆分成2个字节在传输
字符流:(一个字符一个字符传输)Java字符占2个字节

(3)功能

  字节流:流的2段直接接在节点上 功能负责2个节点之间传输数据
  处理流:不能直接接在节点上,只能套在节点流上,作用,给节点流增加额外的功能,处理流不能单独使用
Java的流都是从4个抽象类继承
(字节流)InputStream   OutputStream
(字符流)  Reader        Writer


节点流:(对文件的读写操作)
 FileInputStream / FileOutputStream
 FileReader / FileWriter

InputStream is = new FileInputStream();
is.read();//只读一个字节、默认INT形式/若返回值为-1则读完了
int n = -1;
while ((n = is.read()) != -1){
  System.out.println((char)n);
}

IO流用完必须关闭 is.close()
只要是JAVA和别的内容建立连接(IO数据库连接,Socket连接)
1.消耗时间 2.消耗资源,用完必须关闭
字节流中使用的ISO-8859-1(没有的都用?号表示)的编码 他只有128
Reader is = new FileReader("d:/abc.txt");
字符流中使用的是UTF-8
在流没有关闭的情况下,write添加的就不会覆盖
文件copy(操作系统中复制,粘贴,原理一样 剪切板)

OutputStream os = new FileOutputStream("d:/123.txt");
InputStream is = new FileInputStream("d:/abc.txt");
int n = -1;
while((n = is.read) != -1){
   os.write((char)n);
}
os.close();
is.close();

处理流:
缓冲流(给节点增加缓冲区的功能)
缓冲区:(硬盘的耗损速度是和硬盘读写次数相关) 在没有使用缓冲区的时候往硬盘上写数据是一个字节一个字节写的
例如有3M数据则要借3*1024*1024次,如果使用缓冲区大小默认8M会把数据先放到缓冲区,缓冲区装满后自动放到文件中3M则3*1024/8次起到保护硬盘作用

OutputStream os = new FileOutputStream("d:123.txt");
BufferedOutputStream bos = new BufferedOutputStream(os);
bos.close();//关闭会自动关闭节点流

设置缓冲区的大小:bos.count = 1024*8;
bos.flush() 1.强制性吧数据写出去
            2.吧缓冲区清空

转换流:把字节流转换成字节流(只能放在字节流上),可以指定转换的位置、
InputStreamReader();
OutputStreamReader();

Data(数据流)
   流里传输的只能是字符,字节,不能传输JAVA的字符类型
   数据流可直接读取JAVA相关数据类型(四类八种)

Object流 (Java5.0新特性序列化)
序列化(写在硬盘上):把JAVA中的对象写出去(跟持久化差不多,保存在数据库中)
反序列化:把读进来的数据封装成JAVA的对象
  ObjectOutputStream oos = new ObjectOutputStream(oos);
  implements Seriallizable(接口);
关键字 transient(瞬间的) int lv(这个属性不会序列化)

 

 

posted @ 2013-03-02 20:25  白小白丶  阅读(140)  评论(0编辑  收藏  举报