ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 为什么要在android中的inputstream之后关闭OutputStream

2019-06-26 07:24:37  阅读:130  来源: 互联网

标签:java android inputstream outputstream


我正在以这种方式对来自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
来源: https://codeday.me/bug/20190626/1291525.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有