1

このコードを使用して、バイナリ文字列をテキスト文字列に変更しました。

   StringBuilder contentBuilder = new StringBuilder();
 StringBuffer sb = new StringBuffer();
try {
    BufferedReader in = new BufferedReader(new FileReader("filename.txt"));
    String jitu;
    while ((jitu = in.readLine()) != null) {
        contentBuilder.append(jitu);
    }
    in.close();
} catch (IOException e) {
}
    String binput = contentBuilder.toString();     
     for (int i = 0; i < binput.length()/8; i++)
    {
        int a = Integer.parseInt(binput.substring(8*i,(i+1)*8),2);
       sb.append((char)(a));
    }

次に、次のコードでこのテキストをバイナリに戻したいと思います。

      byte[] bytes = binput.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes){
     int val = b;
     for (int i = 0; i < 8; i++){
     binary.append((val & 128) == 0 ? 0 : 1);
     val <<= 1;
     }}

しかし問題は、binary.append() からいつ出力を取得するかです。それは入力バイナリ文字列と同じではありません。入力と同じ出力が必要です。前もって感謝します。

4

1 に答える 1

0

ファイルに実際に (文字データではなく) バイナリが含まれている場合、その読み取り方法ではデータが失われることがほぼ確実です。デフォルトの文字セットを使用してバイナリを文字列に変換しています。多くのシステムでは、デフォルトの文字セットは UTF-8 です。多くのバイナリ シーケンスは、有効な Unicode 文字にマップされません。そのような場合、そのデータを UTF-8 として解釈している場合、デフォルトの動作は、そのデータをセット置換文字に置き換えることです。つまり、多くのデータを失うことになります。

本当にバイナリ データを文字列として読み込みたい場合 (これは良い方法ではないかもしれません)、可能なすべてのビット シーケンス (Windows-1252 など) のマッピングを持つ文字セットを使用して、確実に勝つことができるようにします。データを失うことはありません。

于 2013-07-07T17:26:32.100 に答える