0

ファイルに書き込み、バイト配列に読み戻す必要がある負の数を含むバイト配列があります。

負の数を含む、長さ 128 のバイト配列が 10 個あるとします。

ファイルを読み取って同じ10バイト配列を再度作成できるように、10個の配列を同じファイルに書き込む最良の方法は何ですか? 長さは常に 128 であることはわかっているので、それは問題ではありません。

私は現在、それらをすべて1つの文字列に入れて、base 64でエンコードし、それをファイルに書き込もうとしました。しかし、ファイルを読み取ってデコードすると、正しく解釈されていないようでした (最初の配列は正常で、もう一方は正常ではありませんでした)。

何か案は?

4

1 に答える 1

3

それらを直接に書き出すだけOutputStreamです-それらをエンコードする必要はありません:

// Or wherever you get them from
byte[][] arrays = new byte[10][128];
...

for (byte[] array : arrays) {
    outputStream.write(array);
}

次に、(で)読むときInputStream

byte[][] arrays = new byte[10][];
for (int i = 0; i < arrays.length; i++) {
    arrays[i] = readExactly(inputStream, 128);
}

...

private static byte[] readExactly(InputStream input, int size) throws IOException {
    byte[] ret = new byte[size];
    int bytesRemaining = size;
    while (bytesRemaining > 0) {
        int bytesRead = input.read(ret, size - bytesRemaining, bytesRemaining);
        if (bytesRead == -1) {
            throw new IOException("Ran out of data");
        }
    }
    return ret;
}

に10回の呼び出しを発行して、毎回1​​28バイトを読み取ると想定することはできないことに注意してください。InputStream.read

于 2013-03-02T08:11:03.607 に答える