1.举例说明应用RandomAccessFile类进行随机文件读写的一般步骤 2.为什么InputStream和OutputStream类不能够实例化? 3. FileInputStream和FileOutputStream流类构造文件读/写的一般格式是什么? 4.什么是对象的序列化?举例说明实现对象序列化的步骤。
1.在API中的官方描述:此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。 通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。 2.InputStream此抽象类是表示字节输入流的所有类的超类。 需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。其中的read方法在InputStream中是被抽象掉的,所以要在其子类中实现。比如FileInputStream中提供了read(byte b);同样的道理在OutputStream中write()被抽象掉了。需要在具体的子类中描述这种写出的形式。 3.FileInputStream是要根据你调用他哪种read()方法决定读取格式,如果你是read()则是一个字节一个字节读,read(byte b)则是用一个麻袋(即数组长度为b)一袋一袋装字节读取。read(byte[] b, int off, int len) 则是用一个麻袋的一部分(数组下标从off到len的长度)装字节读取。 同理FileOutputStream有类似的write()三重载。 4.对象序列化是了方便对象传输,Java只有在JVM虚拟机中才叫java,脱离了虚拟机,就是堆乱码,为了通过像HTTP这样桥,java中的类(对象)改头换面,从怪卡变成普通人的过程叫做对象序列化。实现的过程:1,让class A implements Serializable 把A变得可序列化;2,建立ObjectOutputStream oos=ObjectOutputStream(FileOutputStream("d:/outman/obj"));告诉他:他妈妈叫他回家(即目标地址obj)序列化;3,oos.writeObject(A);他妈把他抽一顿,让他变身成为可传输文件;4,oos.close。如果A的对象有很多,可以考虑放入一个ArrayList中,把ArrayList<A>序列化。这样妈妈只要抽他们中的老大(内存地址),抽完老大他们就都老实了,都可以被传输了。
转载自:http://zhidao.baidu.com/question/427773264.html