这是我的代码
URL url = new URL("http://172.16.32.160:8080/epramaan/loginotp");
URLConnection connection1 = url.openConnection();
connection1.setDoOutput(true);
ObjectOutputStream out=new ObjectOutputStream(connection1.getOutputStream());
out.writeObject(send);
out.flush();
out.close();
ObjectInputStream in = new ObjectInputStream(connection1.getInputStream());
String output=(String)in.readObject();
in.close();
//Rest of the code
一旦OutputStream将数据写入流,对象InputStream是否会停止执行直到收到响应?
答案 0 :(得分:1)
我假设通过停止执行你的意思是阻止。
注意到你正在使用readObject而不是读取。请详细说明您正在读/写的数据类型以及为什么使用对象流?
如你所说,你正在使用String,我建议使用方法readFully(byte[] buf)
。此方法将阻塞,直到读取所有字节为止。获得字节数组后,从该字节数组中String can be created。
答案 1 :(得分:1)
您可以使用InputStream.read(byte[])将整个字节数组读取到内存中(您可以从HTTP Content-Length标头获取数组长度)并使用URLConnection.setReadTimeout()进行超时,如果您也阻止了长。
从字节数组中,您可以构建对象,通过 ByteArrayInputStream构建 ObjectInputStream
答案 2 :(得分:1)
一旦OutputStream将数据写入流,对象InputStream是否会停止执行直到收到响应?
不准确。打开InputStream
不会阻止任何内容,甚至导致发送请求标头。但是,从InputStream
阅读将会同时完成这两项工作。
我怀疑您问题的真正原因是您从服务器获得的错误响应不是序列化对象;例如它可能是来自服务器的通用HTML错误页面。当然,尝试反序列化会失败。
正确的程序是:
getResponseCode()
查看请求是成功还是失败。