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
返される理由を誰か説明してもらえますか?false
ObjectInputStream
true
ByteArrayInputStream