2011-11-19 6 views
-1

バイナリタイプに問題があります。私はデータを持つバイナリファイルを持っています。すべての要素は "_"で分割されます。私は
DataInputStream in = new DataInputStream(new FileInputStream("C:/Data/"+names));を使用しています。ここでnamesは私のバイナリファイルの名前です。このファイルを読み込んで要素を配列に保存するにはどうすればいいですか?これは可能ですか?ファイル内のJavaバイナリタイプ

+1

ファイルは実際にバイナリであるか、下線付きのエントリの区切り規則を使用して "エンコード"されていますか? – Chris

+1

ファイル形式の詳細な説明はありますか? – orien

+0

fyi「_」のASCIIコードは0x5fです –

答えて

3

バイナリファイルに書き込む場合、行列の各項目を '_'で分割する必要はありません。プログラムは、各アイテムに割り当てられたバイト数を認識します。

次のコードでは、 '_'を挟まずに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()メソッドを使用して簡単に読み取ることができます。要素が書かれている正確な順序で、また-が存在すると予想されるときはいつでも(つまり2つの要素の間に)、readChar()を使用するようにしてください。

関連する問題