我需要并处理这种情况,我已经阅读了很多内容,但我没有找到任何关于它的例子或文字。我有一个服务器套接字从2个客户端接收数据:a)来自发送泄漏流的客户端。 b)来自发送ASCII流的客户端。
a)接收放气流:
inflater = new InflaterInputStream(clientSocket.getInputStream());
bout = new ByteArrayOutputStream(3025);
int b;
while ((b = inflater.read()) != -1) {
bout.write(b);
}
strMessage = new String(bout.toByteArray());
b)从ASCII流接收:
bufferEnt = new char[3025];
Arrays.fill(bufferEnt,' ');
input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
intLongBuffer = input.read(bufferEnt);
strMessage = new String(bufferEnt).trim();
在每个单独的情况下,此代码工作正常,变量strMessage
具有正确的信息,但我需要确定流何时缩小,何时不是,所以我可以应用正确的代码片段每个案例,这都是我的大问题!
答案 0 :(得分:1)
您可以将客户端套接字输入流包装到BufferedInputStream
中,然后将缓冲的流包装到InflaterInputStream
中,然后尝试从inflater流中读取。如果出现错误,请忘记inflater流,回放缓冲流,然后直接从缓冲流中读取。您必须使用缓冲流的mark()
和reset()
函数来回放流,您可能需要尝试使用mark()
来确定要传递给它的值。如下所示:
BufferedInputStream bis = new BufferedInputStream(clientSocket.getInputStream());
bis.mark(1024); // experiment to find the correct value here
InflaterInputStream iis = new InflaterInputStream(bis);
try {
... // Process the inflated stream
} catch (ZipException ze) {
// It is not a ZIP stream. Try to process as text
bis.reset();
... // Process the text stream
}
答案 1 :(得分:0)
您可以将字节读入缓冲区,然后尝试对它们进行充气
InflaterInputStream iis = new InflaterInputStream(new ByteArrayInputStream(buf));
...
如果它不是一个放气的流,你将得到一个异常,然后保留字节