Java中的二进制文件类型

问题描述:

我有一个二进制类型的问题。我有数据的二进制文件。每个元素都被“_”分割。我正在使用
DataInputStream in = new DataInputStream(new FileInputStream("C:/Data/"+names));,其中名称是我的二进制文件的名称。我如何读取这个文件并保存数组中的元素?这个有可能?Java中的二进制文件类型

+1

该文件实际上是二进制文件还是只是使用您的约定条目与下划线“编码”? – Chris

+1

您能否详细介绍文件格式? – orien

+0

fyi ascii code of''_''是'0x5f' –

写入二进制文件时,不需要用'_'分割矩阵中的每个项目。该程序知道为每个项目分配了多少个字节。

下面的代码在2之间写入2个不带'_'的双打。之后,它从文件中读回并输出数据。

public class Test { 
    public static void main(String[] args) throws Exception { 
     DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.bin")); 
     dos.writeDouble(1.2); 
     dos.writeDouble(3.4); 
     dos.close(); 

     DataInputStream dis = new DataInputStream(new FileInputStream("a.bin")); 
     System.out.println(dis.readDouble()); 
     System.out.println(dis.readDouble()); 
     dis.close(); 
    } 
} 

程序输出:

1.2 
3.4 

但是,如果你不写的文件,并有“_”项目之间,你可以从二进制文件中读取每个项目为@后使用readChar() Bhaskar已经提到过。最后,使用ObjectOutputStream可以一次写入整个数组。

public class Test { 
    public static void main(String[] args) throws Exception { 
     ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.bin")); 
     double[] a = {1.2, 3.4}; 
     oos.writeObject(a); 
     oos.close(); 

     ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.bin")); 
     double[] b = (double[]) ois.readObject(); 
     System.out.println(b[0]); 
     System.out.println(b[1]); 
     ois.close(); 
    } 
} 

您可以使用read(byte[])read(byte[],ffset,length)将文件的内容读入字节数组。

这取决于如何将数据写入该文件。如果它是使用DataOutputStreamwriteXXX()写的,其中XXX表示元素的实际数据类型,并且元素之间用writeChar('_')分隔,则可以使用DataInputStreamreadXXX()方法轻松读取它们。只要确保您按照它们写入的确切顺序阅读元素,并且每当您期望-存在时(即在两个元素之间),就使用readChar()