将String作为原始数据或对象写入流之间有很大的区别.首先,将writeObject编写的String实例作为String写入流中.将来的writeObject()调用将对字符串的引用写入流中.
例如
ByteArrayOutputStream baos1=new ByteArrayOutputStream();
oos1=new ObjectOutputStream(baos1);
baos2=new ByteArrayOutputStream();
ObjectOutputStream oos2=new ObjectOutputStream(baos2);
String testString="First";
oos1.writeObject(testString);
oos2.writeUTF(testString);
testString="Second";
oos1.writeObject(testString);
oos2.writeUTF(testString);
testString="Third";
oos1.writeObject(testString);
oos2.writeUTF(testString);
oos1.flush();
oos2.flush();
byte[] byteArray1=baos1.toByteArray();
byte[] byteArray2=baos2.toByteArray();
转储最后两个数组,您将得到如下结果:
writeObject即byteArray1
二进制:-84 -19 0 5 116 0 5 70 105 114 115 116 116 0 6 83101 99 111110100 116 0 5 84 104 105 114 100
ASCII:-T-t F i r s t t S e c o n d t T h i r d
writeUTF,即byteArray2
二进制:-84 -19 0 5 119 22 0 5 70 105 114 115 116 0 6 83101 99 111 110 100 0 5 84 104 105 114 100
ASCII:-T-w F i r s t c e c o n d T h i r d
结论:在writeObject的情况下,要传输额外的数据(此处为t),而在writeUTF的情况下,仅要传输字符串数据.