1.javaIO流原理
I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。
Java程序中,对于数据的输入/输出操作以”流(stream)” 的方式进行。java.io包下提供了各种类和接口,用以获取不同类型的数据,并通过标准的方法输入或输出数据。
2、流的分类
按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
按数据流的流向不同分为:输入流,输出流
按流的角色的不同分为:节点流,处理流
字节流继承inputStream和OutputStream
字符流继承自InputSteamReader和OutputStreamWriter
3、字节流和字符流哪个好?怎么选择?
缓大多数情况下使用字节流会更好,因为字节流是字符流的包装,而大多数时候 IO 操作都是直接操作磁盘文件,所以这些流在传输时都是以字节的方式进行的(图片等都是按字节存储的)
如果对于操作需要通过 IO 在内存中频繁处理字符串的情况使用字符流会好些,因为字符流具备缓冲区,提高了性能。
4、Java中什么是序列化,有什么意义?如何实现序列化
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。
要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object obj)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆。
5、说明缓冲流的优点和原理
不带缓冲的流的工作原理:
它读取到一个字节/字符,就向用户指定的路径写出去,读一个写一个,所以就慢了。
带缓冲的流的工作原理:
读取到一个字节/字符,先不输出,等凑足了缓冲的最大容量后一次性写出去,从而提高了工作效率
优点:减少对硬盘的读取次数,降低对硬盘的损耗,提高读写效率。
5、我个人常用的流
文件字节流:FileInputStream、FileOutputStream
对象流:ObjectInputStream ObjectOutputStream
输出流:PrintWriter
注:在使用输入流读取数据的时候 要确保硬盘上的文件存在,如果文件不存在会报异常。输出流将数据写出到硬盘上,如果硬盘上不存在指定文件 ,就会自动创建该文件。