将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 83 101 99 111 110 100 116 0
5 84 104 105 114 100
ASCII:-T - 吨 开始步骤 吨 小号的Econd 吨 ŤHird的
writeUTF 即byteArray2
二进制:-84 -19 0 5 119 22 0 5 70 105 114 115 116 0 6 83 101 99 111 110 100 0 5 84
104 105 114 100
ASCII:-T- w 优先级
结论: 在writeObject的情况下,要传输额外的数据(此处为 t ),而在writeUTF的情况下,仅要传输字符串数据。
有关更多信息:http
:
//docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeUTF(java.lang.String)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)