这真是令人尴尬。我想通过套接字发送一个大的JSON文件,并且字符串自然超出了限制,所以我试着压缩它,但由于某种奇怪的原因,我只能在服务器端获得单个字节。这是我到目前为止有:通过套接字发送大型JSON文件
服务器端:
StringBuilder sb = new StringBuilder();
String str;
while((str = request.getReader().readLine()) != null)
sb.append(str);
Socket client = new Socket("localhost", 8081);
OutputStream outServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(new GZIPOutputStream(outServer));
byte[] buff = sb.toString().getBytes("UTF-8");
System.out.println(buff.length);
out.writeInt(buff.length);
out.write(buff);
out.flush();
client.close();
的BUF长度是在我试图使这项工作的具体情况198153。
客户端:
ServerSocket serverSocket = new ServerSocket(8081);
Socket server = serverSocket.accept();
DataInputStream in = new DataInputStream(new GZIPInputStream(server.getInputStream()));
System.out.println(in.available());
int len = in.readInt();
byte[] buff = new byte[len];
in.readFully(buff);
String response = new String(buff, "UTF-8");
System.out.println(response);
updateMessage(response);
server.close();
serverSocket.close();
的in.available()仅有1在这种情况下,程序不会再执行,它只是停在那里(它不会终止虽然) 任何想法?我认为这可能有助于获得外部的观点,因为这可能是我错过了某些东西,显而易见的东西。谢谢。
甲侧面说明:'InflaterInputStream.available()'将EOF后返回1 EOF之前和0。在这种情况下,它仅仅意味着流有数据。 –
“*字符串自然超出限制*” - 您指的是什么限制?为什么*客户*创建*服务器套接字*,*服务器*创建*客户套接字*?在任何情况下,与插座输入打交道时,你通常应该包括输入缓冲,如:'DataInputStream类中=新DataInputStream所(新GZIPInputStream(新的BufferedInputStream(server.getInputStream())));' –