Java 流压缩-我做错了什么?
对于我的一个项目,我想压缩数据流并通过套接字进行传输。到目前为止我所做的是Java 流压缩-我做错了什么?,java,Java,对于我的一个项目,我想压缩数据流并通过套接字进行传输。到目前为止我所做的是 echoSocket = new Socket(SERVER_HOST_NAME, PORT); consoleIn = System.in; clientIn = echoSocket.getInputStream(); clientInputUnzipper = new InflaterInputStream(clientIn); c
echoSocket = new Socket(SERVER_HOST_NAME, PORT);
consoleIn = System.in;
clientIn = echoSocket.getInputStream();
clientInputUnzipper = new InflaterInputStream(clientIn);
clientOut = echoSocket.getOutputStream();
clientOutputZipper = new DeflaterOutputStream(clientOut);
int r = 0, rc = 0;
System.out.println("Connection achieved to HostName : " + SERVER_HOST_NAME + " on port " + PORT);
while((r = consoleIn.read()) != END_OF_STREAM)
clientOutputZipper.write(r)
在我的客户方面。它似乎发送了第一个字节fine(为了确认这一点,我对客户端进行了故障排除)。但我服务器端的阅读器似乎无法阅读
serverInputStream = clientSocket.getInputStream();
serverInputUnzipper = new InflaterInputStream(serverInputStream);
serverOutputStream = clientSocket.getOutputStream();
serverOutputZipper = new DeflaterOutputStream(serverOutputStream); //used to send the data back to the client
fileOutput = new FileOutputStream(log);
fileFilterOutput = new FilterOutputStream(fileOutput);
int r = 0, c = 0;
while((r = serverInputUnzipper.read()) != END_OF_STREAM) //getting stuck on this line (waiting for input)
考虑到我已经发送了第一个字节,serverInputStream不应该接收它吗?但是,如果它已暂停,我假设它正在等待读取一些数据(serverInputUnzipper.read()函数)。为什么它没有收到预期的数据字节
提前感谢(我今天花了很大一部分时间试图修复这个可能很简单的错误)您是否只发送一个字节,并希望它显示在另一端?压缩的工作原理是获取一块数据,应用分析,进行压缩,然后编写压缩版本。在内部,在开始写出压缩版本之前,它将具有所需的最小块大小。在写入一个字节后,它仍在等待更多数据,以便可以一起分析这些数据。将压缩应用于控制台输入是行不通的,至少不像您这样做。它需要一次读一行,然后压缩这行isolation@SlipperySeal这就是r=控制台行要做的;存储单个控制台线路以允许压缩。在当前设置中不是这样吗?一次读取一个字节,然后写入一个字节。您可能会被任何缓冲区卡住。首先,读取行或其他大小合适的数据块,然后,当您想要实际发送内容时,刷新出站流。@pvg这看起来像什么?我对处理流还不熟悉,那么如何将读取扩展到4个字节,而不是读取单个字节呢?