3

このようなバイナリファイルに書き込む場合:

byte[] content = {1,2,3};
FileOutputStream  output =   new FileOutputStream("data.bin");
DataOutputStream fileName = new DataOutputStream(output);
fileName.writeInt(content.length);
for (int i = 0; i < content.length; i++)
{
fileName.writeInt(content[i]);
System.out.println(content[i]);
}
fileName.close();

FileInputStream / DataInputStreamと.readInt()を使用して読み戻すと、すべて問題ありません。(.skip(4);を使用する場合、最初の値には書き込まれた桁数である値が含まれているように見えるため)

ただし、byte[]の内容がスキャナーを使用した入力に置き換えられた場合。

java.util.Scanner in = new java.util.Scanner(System.in);
String inputAsString = in.nextLine();
byte[] content = inputAsString.getBytes();

バイナリファイルに10進数で書き込まれていることに気づきました。1は49になり、2は50になり、3は51になります...私の質問は、ハードコードされたバイト配列を使用した最初の例のように、どうすれば1、2、3に読み戻すことができるかです。

4

2 に答える 2

1

入力からデータを読み込むとき、それは文字列です。つまり、ascii/utf-xバイトを取得しています。つまり、書き込んでいる値はバイトです。読み取った入力をintに変換したい:

int toWrite = parseInt(inputAsString);
fileName.writeInt(toWrite);

51は文字「3」に割り当てられたASCII値であることに注意してください

あなたがそれをintとして書き出すならば、あなたはそれをそのように読むことができるはずです。

于 2012-12-05T15:03:51.633 に答える
0

in.nextByte()ループで使用して、エントリをバイトとして読み取ります。

     byte[] bytes = new byte[SIZE];
     int indx = 0;
     while(in.hasNextByte()){
        bytes[indx++] = in.nextByte();
     }

編集:サイズがわからない場合:

    List<Byte> byteList = new ArrayList<Byte>();
    while(in.hasNextByte()){
       byteList.add(in.nextByte());
    }
    Byte[] bytes = byteList.toArray(new Byte[]{});
于 2012-12-05T15:01:39.690 に答える