2011-11-19 63 views
-1

我有一個二進制類型的問題。我有數據的二進制文件。每個元素都被「_」分割。我正在使用
DataInputStream in = new DataInputStream(new FileInputStream("C:/Data/"+names));,其中名稱是我的二進制文件的名稱。我如何讀取這個文件並保存數組中的元素?這個有可能?Java中的二進制文件類型

+1

該文件實際上是二進制文件還是隻是使用您的約定條目與下劃線「編碼」? – Chris

+1

您能否詳細介紹文件格式? – orien

+0

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

回答

3

寫入二進制文件時,不需要用'_'分割矩陣中的每個項目。該程序知道爲每個項目分配了多少個字節。

下面的代碼在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(); 
    } 
} 
0

您可以使用read(byte[])read(byte[],ffset,length)將文件的內容讀入字節數組。

1

這取決於如何將數據寫入該文件。如果它是使用DataOutputStreamwriteXXX()寫的,其中XXX表示元素的實際數據類型,並且元素之間用writeChar('_')分隔,則可以使用DataInputStreamreadXXX()方法輕鬆讀取它們。只要確保您按照它們寫入的確切順序閱讀元素,並且每當您期望-存在時(即在兩個元素之間),就使用readChar()