1).Java的二进制文件不想其他编程语言中的二进制文件。Java的二进制文件是可移植的,能从一台计算机传送到另一台计算机上,并被Java程序读取,这种二进制文件一般不能用文本编辑器读取,也不能被其他非Java的程序读取。

2).ObjectOutputStream类的一些方法

1.public ObjectOutputStream(OutputStream streamObject)

没有以文件名为自变量的构造方法,再调用时应用下列代码作为参数:

new FilePutputStream(File_Name)或者File_Object

该方法创建一个空白文件,若文件存在,该文件内容丢失。

2.public void writeInt(int n)throws IOException

将int值n写入输出流中。

类似的方法还有对short、long、double、float、boolean等数据的输出。

1.public void writeChar(int n)throws IOException

该方法将char类型的数值写入输出流,这里是int值表示的char值,若传入char值作为参数,系统会自动转换。

2.public void writeUTF(String a)throws IOException

该方法将String数据写入输出流。UTF是一种特殊的字符串编码方法。

3.public void writeObject(Object b)throws IOException

该方法将可序化对象写入输出流。

4.public void close()throws IOException

5.public void flush()throws Ioexception

3).ObjectInputStream类的一些方法

1.public ObjectInputStream(InputStream streamObject)

与ObjectOutputStream类的构造方法相似。

2.public int readInt()throws IOException

从输入流读取一个int值,并返回该值。

如果readInt方法试图从文件中读取一个int值,而该值不是用ObjectOutputStream类的writeInt方法写入的,则会出现问题。

如果读取超过文件返回的数据,则会抛出一个EOFExceotion异常。

类似的方法还有读取short、long、double、float、char、String(readUTF)、boolean、Object(可序化对象)等数据。

当读取类的对象时找不到该可序化类会抛出ClassNotFoundExceotion异常。

3.public int skipBytes( int n)throws IOException

跳过 n个字节

4.public void close()throws IOException

关闭与文件的连接

3)ObjectOutputStream类允许我们从同一个文件中读取不同的数据,但若下一个数据项不是读取方法所期待的类型,结果可能一团糟,他要求读取的数据必须是由该写入类的方法写入的,否则也会引发异常。.

4).对象的二进制输入要求类是可序化的,要实现类的可序化,代码要读写的类对象的类必须实现接口Serializable接口。例如:

public class SomeClass implement Serializable
 {…}

并且如果一个类是可序化的,则Java为每个被写入ObjectOutputStream类型的流中的该类的对象分配一个序列号。如果相同对象多次被写入流中,则在第一次写入该对象后,Java只写入该对象的序列号,而不是写入该对象的完整的数据描述,这使得文件更小、文件的输入输出更有效。

4).在使用ObjectOutputStream类和ObjectInputStream类进行读写对象最好的办法是将相同类型的数据放在一个文件中,如果不同数据混合储存,系统会产生混淆,可能会丢失数据。

import  java.io.ObjectOutputStream;

import  java.io.ObjectInputStream;

import   java.io.FileOutputStream;

import   java.io.FileInputStream;

import   java.io.FileNotFoundException;

import   java.io.IOException;

 

/**

 * @author 爱哭的周小姐

 *   将一个类写入二进制文件和读取

 */

public class ObjectIODemo 

{

    public static void main(String[] args)

    {

        try

        {

            ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream("asd.txt"));
            
            A oneObject=new A();                    //A 是类类型
            
            outputStream.writeObject(oneObject);
            
            outputStream.close();

        }

        catch(IOException e)

        {

            System.exit(0);
            
}

        

        try

        {

            ObjectInputStream inputStream=new ObjectInputStream(new FileInputStream("sdf.txt"));
            
            A two=(A)inputStream.readObject();                    //注意类型转换, 若对象是数组,则应转化为数组类型
       
          }

        catch(FileNotFoundException e)

        {

            System.exit(0);
            
        }

        catch(ClassNotFoundException w)

        {

            System.exit(0);
            
        }

        catch(IOException a)

        {

            System.exit(0);
            
        }
        

    }
     

}

5). 随机访问二进制文件

如果需要在Java中随机地读写一个文件,应使用流类RandomAccessFile。类似与其他流类,这个类也包含在Java.io中。

RandomAccessFile类的一些方法

1.public RandomAccessFile(String filename, String mode)

public RandomAccessFile(File fileObject, String mode)

打开文件,但不删除该文件中已有的数据,并将指针位置定位在第一个位置(0)。

mode必须取如下值:

r 以只读方式打开文件

rw 以读写方式打开文件

rws 与rw相同,但要求每次对文件的内容或元数据的更新同步地写入底层的存储设备。

rwd 与rw相同, 但要求每次对文件的内容的更新同步地写入底层的存储设备。

1.public long getFilePointer()throws IOException

返回文件指针的当前位置。位置是从0开始的。

2.public void seek(long location) throws IOException

将文件指针移动到指定位置。

3.public long length() throws IOException

返回文件的长度

4.public void setLength(long newLength)throws IOException

设置文件的长度

如果文件的长度大于newLength,则文件将被截短。在这种情况下,如果getFilePointer方法返回文件的指针位置大于newLength,则该方法返回后,文件指针位置将被设置为newLength。

如果文件长度小于newLength,则文件被拉长,在这种情况下,拉长部分的内容没有定义。

5.public void close() throws IOException

6.public void write(int n) throws iOException

将指定字节写入文件中。

7.public void wrieByte(byte[] a) throws IOException

将指定字节数组中的a.length个字节写入文件中。

8.public final void writeInt(int n) throws IOException

将int类型的n值写入文件

类似的还有将byte、double、float、char、long、boolean、String(UTF)等数据的输出

9.public int read() throws IOException

从文件中读取一个字节的数据,并以0-255之间的一个整数返回他。

上述写方法都有对应的一个读方法。