1.Java 的IO可以分为以下四类
- 基于字节操作的I/O接口: InputStream 和 OutputStream
- 基于字符操作的I/O接口:Writer 和Reader
- 基于磁盘操作的I/O接口:File
- 基于网络操作的I/O接口:Socket
2.字符和字节
- 计算机存储信息的最小单位,称为位(bit),音译:比特
- 计算机存储容量基本单位是字节(byte),音译:byte
- 8个二进制位组成1个字节,一般一个标准英文字母是一个字节位置,一个标准汉字站2个字节位置
- 字符是一种符号,同以上存储单位不是一回事。比如 1 2 3 a b c ! @ # % $ * 等
- 不管是磁盘还是网络传输,最小存储单位都是字节,不是字符,所以I/O操作的都是字节而不是字符.
- 提供操作I/O的字符接口原因:程序通常的操作都是字符形式的,为了操作方便当然提供一个直接写字符的IOj接口
3.字节流和字符流哪个好?怎么选择?
- 大多数情况下使用字节流会更好,因为大多数时候 IO 操作都是直接操作磁盘文件,所以这些流在传输时都是以字节的方式进行的(图片等都是按字节存储的)
如果对于操作需要通过 IO 在内存中频繁处理字符串的情况使用字符流会好些,因为字符流具备缓冲区,提高了性能
4.什么是Java序列化,如何实现Java序列化?
序列化就是一种用来处理对象流的机制,将对象的内容进行流化。可以对流化后的对象进行读写操作,可以将流化后的对象传输于网络之间。序列化是为了解决在对象流读写操作时所引发的问题
序列化的实现:将需要被序列化的类实现Serialize接口,没有需要实现的方法,此接口只是为了标注对象可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,再使用ObjectOutputStream对象的write(Object obj)方法就可以将参数obj的对象写出
5. InputStream里的read()返回的是什么,read(byte[] data)是什么意思,返回的是什么值?
返回的是所读取的字节的int型(范围0-255)
read(byte [ ] data)将读取的字节储存在这个数组。返回的就是传入数组参数个数
6. OutputStream里面的write()是什么意思,write(byte b[], int off, int len)这个方法里面的三个参数分别是什么意思?
write将指定字节传入数据源
- Byte b[ ]是byte数组
- b[off]是传入的第一个字符、b[off+len-1]是传入的最后的一个字符 、len是实际长度