1

出力ストリームに送信するすべてのものからバイト配列を取得する必要があります。しかし、代わりに私は4バイトのゴミを受け取ります。なんで?

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.write(new byte[]{1,2,3,4,5,6,7,8,9});
byte[] original = byteArrayOutputStream.toByteArray(); 
System.out.println(Arrays.toString(original)); // why not [1,2,3,4,5,6,7,8,9]?
4

3 に答える 3

2

コードにはいくつかの欠陥があります。まず最初に使用する必要がありますwriteObject()

objectOutputStream.writeObject(new byte[]{1,2,3,4,5,6,7,8,9});

ObjectInputStream次に、読み取りに対称を使用する必要があります。

final ObjectInputStream objectInputStream = new ObjectInputStream(
        new ByteArrayInputStream(
                byteArrayOutputStream.toByteArray()
        )
);
byte[] original = (byte[]) objectInputStream.readObject();

ただし、すでにを持っている場合はbyte[]、Javaシリアル化を使用してバイト配列に変換しても意味がありません(すでにそうです!)。直接書き込んで読み取るだけです。

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9});
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
    byteArrayOutputStream.toByteArray()
);
final byte[] original = new byte[9];
byteArrayInputStream.read(original);
System.out.println(Arrays.toString(original));
于 2012-09-06T12:24:22.673 に答える
0

objectOutputStreamには何も書き込みませんでしたが、ObjectOutputStreamに付属するいくつかのメタ情報を書き込みました。小さな例として、ByteArrayOutputStreamを使用できます。次に、byteArrayOutputStream.flush()を使用してデータをストリームに書き込む必要があります。

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(new byte[]{1,2,3,4,5,6,7,8,9});
byteArrayOutputStream.flush();
byte[] original = byteArrayOutputStream.toByteArray(); 
System.out.println(Arrays.toString(original));

そして、終わったらストリームを閉じることを忘れないでください!

byteArrayOutputStream.close();

ObjectOutputStreamsは、オブジェクトをシリアル化するために使用されます。オブジェクトをシリアル化する場合は、ObjectOutputStream#writeObjectおよびObjectInputStream#readObjectを使用する必要があります。

例: http: //java.sun.com/developer/technicalArticles/Programming/serialization/

于 2012-09-06T12:23:49.883 に答える
0

ObjectOutputStreamはOutputStreamではなく、同じことを行った場合、それを使用してもあまり意味がありません。

ObjectOutputStreamはオブジェクトの書き込みに使用され、ヘッダー(表示可能)とフッター(ストリームを閉じないと表示されない)があります。

于 2012-09-06T12:17:45.770 に答える