* 定义一个文件输入流,调用read(byte[] b)方法,将a.txt文件中的内容打印出来(byte数组大小限制为5)
*
FileInputStream fis = new FileInputStream("a.txt"); //创建字节输入流,关联a.txt
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //创建内存输出流
byte[] arr = new byte[5]; //创建字节数组,大小为5
int len;
while((len = fis.read(arr)) != -1) { //将文件上的数据读到字节数组中
baos.write(arr, 0, len); //将字节数组的数据写到内存缓冲区中
}
System.out.println(baos); //将内存缓冲区的内容转换为字符串打印
fis.close();
五、对象操作流ObjectOutputStream(序列化)
序列化:就是将内存中的数据写入磁盘,
反序列化:就是将磁盘上的数据读到内存。
* 1.什么是对象操作流
* 该流可以将一个对象写出, 或者读取一个对象到程序中. 也就是执行了序列化和反序列化的操作.之前的字节字符流都是写入写出byte字节,或者char字符的。这个可以写入写出对象。
* 2.使用方式
* 写出: new ObjectOutputStream(OutputStream), writeObject()
/**
* @param args
* @throws IOException
* 将对象写出,序列化
*/
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));//创建对象输出流
oos.writeObject(p1);
oos.writeObject(p2);
oos.close();
六、对象操作流ObjectInputStream(反序列化)
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
Person p1 = (Person) ois.readObject();
Person p2 = (Person) ois.readObject();
System.out.println(p1);
System.out.println(p2);
ois.close();
七、对象操作流优化
* 将对象存储在集合中写出
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
Person p3 = new Person("马哥", 18);
Person p4 = new Person("辉哥", 20);
ArrayList<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f.txt"));
oos.writeObject(list); //写出集合对象
oos.close();
* 读取到的是一个集合对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("f.txt"));
ArrayList<Person> list = (ArrayList<Person>)ois.readObject(); //泛型在运行期会被擦除,索引运行期相当于没有泛型
//想去掉黄色可以加注解 @SuppressWarnings("unchecked")
for (Person person : list) {
System.out.println(person);
}
ois.close();