java 缓冲流 对象流
程序员文章站
2024-03-04 15:33:23
...
缓冲流(高效率的流)
1.缓冲流字节流
BufferedOutputStream 缓冲输出字节流
构造方法:
BufferedOutputStream(OutputStream out)
参数:字节输出流的父类 FileOutputStream
想对哪个流高效 就把谁传进去
BufferedInputStream 缓冲输入字节流
//缓冲字节流写入
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/ppt.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("helloWoerld".getBytes());
bos.close();
//缓冲字节流读取
FileInputStream fis = new FileInputStream("/Users/lanou/Desktop/Test/ppt.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[1024];
int len = 0;
while ((len = fis.read(b, 0, len)) != -1) {
System.out.println(new String(b, 0, len));
}
bis.close();
缓冲字符流
2. BufferedWrite
构造方法:
参数:Write(父类)
可传 FileWrite OutputStreamWrite
特有方法:
newLine() 无关平台性 mac \n
windows /r/n
BufferedReader
// 文件复制(按行读 按行写)
FileWriter fw = new FileWriter("/Users/lanou/Desktop/Test/ppt1.txt");
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/ppt.txt");
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String string = "";
while ((string = br.readLine()) != null) {
bw.write(string);
// 读的时候 读不出来换行
// 需要自己加
bw.newLine();
bw.flush();
}
br.close();
bw.close();
缓冲流高效的体现
3.
Properties集合
4.Properties集合是双列集合 父类:HashTable
作用: Properties是集合中唯一一个能和 IO流配合的类
读取和写入时参数 可以是字符流 也可以是字节流
//写一个Properties集合
Properties properties = new Properties();
//该集合 最好使用 key和value都是字符串
properties.set.Property("gender", "男");
// 遍历集合
// 取出所有key
Set<String> set = properties.stringPropertyNames();
for(String key : set){
String value = properties.getProperty(key);
System.out.println(key + "==" + value);
}
//读取
Properties properties = new Properties();
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/q.txt");
properties.load(fr);
System.out.println(properties);
fr.close();
//写入
//写入
Properties properties = new Properties();
properties.setProperty("a", "haha");
properties.setProperty("丁鹏", "哈哈");
properties.setProperty("b", "haha");
//后缀名 给什么都
// 但是一般写法 使用.properties 当做文件的后缀名
// 用来标示该文件可以使用Properties类读取
FileWriter fw = new FileWriter("/Users/lanou/Desktop/Test/xzb.properties");
// 利用Properties类中的方法写入
// 参数二:相当于文件的注释 一般什么都不写
// 在properties文件中 可以使用井号(#)来写注释
properties.store(fw, "");
fw.close();
对象流(序列化与反序列化)
5.序列化流与反序列化流
序列化 把对象写进文件中
反序列化 从文件中把对象读取出来
对象流
ObjectInputStream
ObjectOutputStream
注意: 静态成员变量 是不能进行序列化的
序列化 序列是对象 静态成员变量是是属于类的
序列化 相当于是 把对象进行持久化
//序列化
public static void writeObject() throws FileNotFoundException, IOException {
// 注意:如果要对对象进行实例化 必须要实现Serializable(序列化接口) 该接口是标记型接口
// 注意 写对象都使用字节流去操作
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/person.txt");
//创建对象输出流(序列化流)
ObjectOutputStream oos = new ObjectOutputStream(fos);
//使用写对象的方法
oos.writeObject(new Person("dp", 15));
oos.close();
}
//反序列化
public static void readObject() throws FileNotFoundException, IOException, ClassNotFoundException {
// 读取序列化文件(反序列化)
// 在进行反序列化(读取)的时候 需要依赖你的便以文件.class文件 来进行读取的
FileInputStream fis = new FileInputStream("/Users/lanou/Desktop/Test/person.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 读文件
Object object = ois.readObject();
System.out.println(object);
ois.close();
}
下一篇: 7-对象流