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个字节,而不是读取单个字节呢?