public byte[] toByteArray() {
try {
ByteArrayOutputStream objectStream = dataObject.toByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(objectStream);
dout.writeUTF(recordid);
dout.close();
objectStream.close();
return objectStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
위의 코드에 문제가 있습니다. 먼저 (다른 클래스에서) objectStream을 만듭니다. 그런 다음 나는 수동으로 recordid를 ByteArrayOutputStream에 추가합니다. 하지만 먼저 레코드를 추가하는 방법이 있습니까? & 다음에 ByteArrayOutputStream을 추가하십시오. 기본적으로 연결된 2 ByteArrayoutputStream 있습니다 (및 ByteArrayOutputStream 남아).Concatenate ByteArrayOutputStream
편집 : 내 새 버전이 작동해야하지만 작동하지 않아야합니다. dout의 해시 코드를 출력 할 때 플러시 전후에 동일합니다. 그것은 비어있는 채로있는 것처럼 보입니까? 그게 가능하니?
public byte[] toByteArray() {
try {
ByteArrayOutputStream realOutputStream = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(realOutputStream);
dout.writeUTF(dataObject.getClass().toString());
dout.writeUTF(recordid);
System.out.println("Recordid: " + recordid + "|" + dout.hashCode());
dout.flush();
System.out.println("Recordid: " + recordid + "|" + dout.hashCode());
ByteArrayOutputStream objectStream = dataObject.toByteArrayOutputStream();
dout.write(objectStream.toByteArray());
dout.close();
objectStream.close();
return objectStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
writeUTF와 write 사이에 dout.flush()를 사용해 보았습니다. 그러나 recordid가 스트림에 추가되지 않았습니다. S – Vincent
이렇게하면 원본 스트림이 변경되지 않고 데이터를 앞에 추가 할 수 없습니다. –