0

ostreamのバイトがシリアル化されたオブジェクトまたはバイトの配列を表しているかどうかを確認したい:

ByteArrayOutputStream ostream = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(ostream);
out.writeObject(new TestClass());
out.flush();
out.close();

byte[] bytes = ostream.toByteArray();
isSerializedObject(new ObjectInputStream(
  new ByteArrayInputStream(bytes)))); // returns false
isSerializedObject(new ByteArrayInputStream(bytes))); // returns true

のコードをisSerializedObject以下に示します。

public static boolean isSerializedObject(InputStream istream) throws Exception {
  int size = 2;
  PushbackInputStream pis = new PushbackInputStream(istream, size);
  byte[] buffer = new byte[size];
  pis.read(buffer);
  // serialized data can be identified by the following two bytes
  boolean flag = buffer[0] == 0xAC && buffer[1] == 0xED;
  pis.unread(buffer);
  return flag;
}

を使用すると返されるのに、を使用するとisSerializedObject返される理由を誰か説明してもらえますか?falseObjectInputStreamtrueByteArrayInputStream

4

1 に答える 1

0

なんで?(a) write() の代わりに writeObject() を使用してバイト配列を書き込み、(b) オブジェクトを読み取り、後で「instanceof」を使用するだけです。はるかに簡単で、プロトコルをのぞく必要はありません。

于 2013-01-31T23:35:49.307 に答える