io 流
io流 input output 输入输出流
java流的概念:java程序开辟的内存和其他的节点之间需要传输内容(读/写)必须建立一个管道来传输内容(字节和字符)那么这个管道就称之为流。
流的分类
- 按照方向:输入(读) 输出(写)
- 按照传输的内容 字节流和字符流
- 按照功能的区分 节点流和处理流
其中节点流流的两端直接接在节点上
处理流不能接在节点上,只能套在流的外面,相当于给普通的节点流增加了一些额外的功能
节点流:
InputStream OutputStream Reader Writer
输入字节流 输出字节流 输入字符流 输出字符流
节点流的命名:以java内存以外的节点的名称+后缀来命名的
比如 FileInputStream FileOutputStream FileReader FileWriter
要时间要资源所以要关闭 最后XX.close();
字节流中的write一次只能写一个字节出去,写中文用字符流
.read();第一次会把当前指向的字节返回回来
第二若已经读到文件的末位,返回 -1;
复制的程序就是就是新从一个文件读进来在写出去
import java.io.*;
public class Test12 {
public static void main(String args[]) throws Exception {
FileReader fis = new FileReader("d:/a.txt");
BufferedWriter bos = new BufferedWriter (new FileWriter("d:/b.txt"));
int n = -1;
while((n=fis.read())!=-1){
bos.write(n);
}
bos.flush();
fis.close();
bos.close();
}
}
其中加了一个缓冲流就是给节点流增加了缓冲的功能 保护硬盘
数据流:
让java的数据可以直接传输与java相关数据类型的数据
Data流
例题
import java.io.*;
public class Test12a{
public static void main(String atgs[]) throws Exception{
// DataOutputStream dos = new DataOutputStream(new FileOutputStream("d:/c.txt"));
//dos.writeInt(1111);
DataInputStream dis = new DataInputStream( new FileInputStream ("d:/c.txt"));
int n = dis.readInt();
System.out.println(n);
dis.close();
}
}
Object流
java5.0新特性 序列化
对象想被序列化,就必须实现序列化的借口 seriallizable
把一个对象通过Object流写出去称之为序列化
利用Object流把读出来的内容直接封装成对象称之为反序列化
transient String password;(顺瞬时不被序列化)
例题:
import java.io.*;
public class Test12b {
public static void main(String args[])throws Exception {
/*ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream("d:/d.txt"));
Person p = new Person();
p.name = "arron";
p.lv = 13;
p.password = "aaaaa";
oos.writeObject(p);*/
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/d.txt"));
Person p =(Person)ois.readObject();
System.out.println(p.password);
ois.close();
}
}
class Person implements Serializable {
String name ;
int lv;
transient String password;
}