我正在创建一个Android应用程序并将xml发送到ip地址。我应该回复一个xml作为响应,但输入流缓冲区中的字节总是为空。我使用以下代码:
String sMessage = "<Server><CONNECT><IP>192.168.1.14</IP><Client_ID>123</CLIENT_GUID></CONNECT></Server>";
Socket clientSocket = null;
clientSocket = new Socket("192.168.252.148",34543);
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(),true);
pw.write(sMessage);
InputStream in = clientSocket.getInputStream();
byte[] buffer = new byte[in.available()];
System.out.println("buffer size: "+buffer.length);
pw.close();
in.close();
clientSocket.close();
知道为什么我的输入流中没有字节。提前谢谢。
答案 0 :(得分:1)
http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()
类
available
的{{1}}方法始终返回0.这个方法应该被子类覆盖。
尝试使用InputStream
进行换行。
BufferedInputStream
答案 1 :(得分:0)
我应该返回一个xml作为响应但输入流缓冲区中的字节
可能是这样,但不是即时的,这是你的代码所假设的。如果有任何正确的available()使用,那么这不是其中之一。只是阻止阅读。
答案 2 :(得分:-1)
.available()
不能用于进程间通信(包含序列),因为它只检查当前进程中是否有可用的数据(在输入缓冲区中)。
在串行通讯中,当您发送按摩然后立即拨打available()
时,您将大部分收到0,因为串口尚未回复任何数据。
解决方案是在单独的线程中使用阻塞read()(使用interrupt()来结束它):
try this Thread interrupt not ending blocking call on input stream read
在某些流(例如BufferedInputStream,
上有内部缓冲区)上,读取了一些字节kept in memory
,因此您可以读取它们without blocking the program flow
。在这种情况下,available()
方法会告诉您缓冲区中保留了多少字节。
new BufferedOutputStream(clientSocket.getOutputStream()));
new BufferedInputStream (clientSocket.getInputStream())