JAVA I/O 篇

2018-04-26

Java 关于 IO 的操作都要 try catch .flush();可以把内存中没堆满的直接写入,一般跟在.write()方法后面

不过,关于 copy 的实现方法,提供几个比较高效的

· Java7 的 Files 类

Files.copy(source.toPath(), dest.toPath());

· FileChannel FileUtils

FileUtils.copyFile(source, dest);

Q:什么是序列化?
A:四将对象转换为字节序列的过程, 文本、图片、音频、视频等都是通过二进制序列进行传输的。

Q:那怎么实现呢?
A: ObjectOutputStream & ObjectInputStream
ObjectOutputStream 类中:通过使用 writeObject(Object object) 方法,将对象以二进制格式进行写入。
ObjectInputStream 类中:通过使用 readObject()方法,从输入流中读取二进制流,转换成对象。

File file = new File("D:/test.txt");
Student student = new Student("孙悟空","12");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(student);
//
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
Student s = (Student) objectInputStream.readObject();         System.out.println(s.toString());

第二种
Seriable: 目标对象需要先实现 Seriable 接口(没有任何方法)。
通过在序列化对象中实现 writeObject()和 readObject()方法,传入 ObjectOutputStream 和 ObjectInputStream 对象,完成序列化。

OutputStream outputStream = new FileOutputStream("output.txt")
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(student);
//
InputStream inputStream= new FileInputStream("output.txt")
ObjectInputStream objectInputStream= new ObjectInputStream(inputStream);
objectInputStream.readObject();

不要忘了所有对象的.close()

转换流
transient 关键字,主要用来忽略我们不希望进行序列化的变量。