-1

文字またはバイナリ ファイルと同じ順序で 0 と 1 の文字列として読み取って保存する必要があるバイナリ ファイルがあります。現在、バイナリ ファイルを読み取ることはできますが、0 と 1 を取得できません。現在使用しているコードは次のとおりです。

public void read()
{
    try
    {
        byte[] buffer = new byte[(int)infile.length()];
        FileInputStream inputStream = new FileInputStream(infile);

        int total = 0;
        int nRead = 0;
        while((nRead = inputStream.read(buffer)) != -1)
        {
            System.out.println(new String(buffer));
            total += nRead;
        }
        inputStream.close();
        System.out.println(total);
    }
    catch(FileNotFoundException ex)
    {
        System.out.println("File not found.");
    }

    catch(IOException ex)
    {
        System.out.println(ex);
    }
}  

そして、バイナリファイルでこれを実行した結果の出力:

 �, �¨Ã �¨Êà   
�!Cˇ¯åaÃ!Dˇ¸åÇÃ�"( ≠EÃ!J�H���û�������  
����������������������������������������������������������������������������������������  
156

ご協力いただきありがとうございます。

4

4 に答える 4

0

バイトを直接文字に変換してから出力する代わりに、各バイトをバイナリ文字列に変換して出力します。つまり、置き換えます

System.out.println(new String(buffer));

for (int i = 0; i<nRead; i++) {
    String bin=Integer.toBinaryString(0xFF & buffer[i] | 0x100).substring(1);
    System.out.println(bin);
}

ただし、各バイトのビットはビッグ エンディアン順で出力されることに注意してください。ビットが実際にこの順序でディスクに格納されているかどうかを知る方法はありません。

于 2013-09-20T21:40:31.130 に答える
-1

この応答は C で記述されていますが、JNI を使用して Java プログラムからネイティブにアクセスできます。

これらはバイナリ形式であるため、読み取ることはできません。私はこのようにします。

fstream fs;
int value; //Since you are reading bytes, change accordingly.
fs.open( fileName, is.in | is.binary );

fs.read((char *) &value, sizeof(int));

while(!fs.eof())
{
    //Print or do something with value
    fs.read((char *) &value, sizeof(long));
}           
于 2013-09-24T14:44:18.910 に答える