java-writeUTF(String s)vs writeObject(String s)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-writeUTF(String s)vs writeObject(String s),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2220字,纯文字阅读大概需要4分钟。
内容图文
在我正在上大学的这个Java项目中,我遇到一种情况,当前我正在使用
streamOut = ObjectOutputStream
streamIn = ObjectInputStream
streamOut.writeUTF(msgs.peek());
其中msgs是一个链接的阻止队列,通过
String in = streamIn.readUTF();
但是,我想使用一个ObjectInputStream和一个ObjectOutputStream.我已经在构造函数中初始化了它们,并在构造它后刷新了ObjectOutputStream,我读到某个地方必须这样做.
我想同时发送Strings和另一个Object类型,通过网络将其称为gameWorld(此时不关心效率).但是当我这样做时
streamOut.writeObject("mad cuz i'm bad");
Object in = streamIn.readObject();
if(in instanceof String) String inS = (String) in;
当我发送字符串时,它什么也没捡到…我的朋友正在同一个项目上,他只传递了一种对象,该对象的子类之一实际上是字符串,并且他的版本运行良好,但是他在线程的运行循环的每次迭代中都创建了一个新的流.
我是否需要对流执行某些操作以接收除对象之外没有其他共同祖先的不同对象,我是否需要在运行循环的每次迭代中创建一个新的流,或者是否还有其他完全属于我的东西缺少信息,我提供的信息不足以告诉我们出什么问题了吗?
解决方法:
将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的情况下,仅要传输字符串数据.
更多信息:http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeUTF(java.lang.String)
内容总结
以上是互联网集市为您收集整理的java-writeUTF(String s)vs writeObject(String s)全部内容,希望文章能够帮你解决java-writeUTF(String s)vs writeObject(String s)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。