java – 为什么要在android中的inputstream之后关闭OutputStream
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么要在android中的inputstream之后关闭OutputStream,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1833字,纯文字阅读大概需要3分钟。
内容图文
我正在以这种方式对来自android的servlet进行两次succssive调用:
//FIRST CONNECTION
URL url = new URL("http://172.16.32.160:8080/xyz/check_availability");
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
ObjectOutputStream out=new ObjectOutputStream(connection.getOutputStream());
String a="xya";
String b="xsw";
out.writeObject(a);
out.flush();
ObjectInputStream in=new ObjectInputStream(connection.getInputStream());
String s=(String)
in.readObject();
in.close();
out.close();
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_LONG).show();
//SECOND CONNECTION
URL url1 = new URL("http://172.16.32.160:8080/xyz/check_availability");
HttpURLConnection connection1 = (HttpURLConnection)url1.openConnection();
connection1.setDoOutput(true);
ObjectOutputStream out1=new ObjectOutputStream(connection1.getOutputStream());
out1.writeObject(b);
out1.flush();
ObjectInputStream in1=new ObjectInputStream(connection1.getInputStream());
String str=(String)
in1.readObject();
in1.close();
out1.close();
Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_LONG).show();
上面的代码运行良好,因为我在关闭输入流后关闭了第一个连接的输出流.但是如果我在发送对象后关闭输出流,则第二个输入流会抛出异常:
java.io.StreamCorruptedException
关闭输入流后,为什么要关闭输出流?
注意
如果有人知道实际答案或正确的原因,为什么它在Android中不起作用,请回答.直到那时我会接受EJP给出的答案 – 这是android中的一个错误.
解决方法:
看起来像Android中的一个错误.
在Java中,无论如何,通过HttpURLConnection随时关闭ObjectOutputStream除了刷新输出之外什么也不做(因为连接必须保持接收响应).关闭HttpURLConnection的输入流将关闭整个连接,因此后续关闭ObjectOutputStream将不执行任何操作.
我怀疑Android首先执行ObjectOutputStream.close()时会对连接造成不良影响,例如关闭它.
我完全省略了ObjectOutputStream.close(),你不需要在任何一个平台上都使用它. flush()就足够了.
内容总结
以上是互联网集市为您收集整理的java – 为什么要在android中的inputstream之后关闭OutputStream全部内容,希望文章能够帮你解决java – 为什么要在android中的inputstream之后关闭OutputStream所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。