检测输入流是否放气

时间:2013-04-16 15:10:57

标签: java

我需要并处理这种情况,我已经阅读了很多内容,但我没有找到任何关于它的例子或文字。我有一个服务器套接字从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具有正确的信息,但我需要确定流何时缩小,何时不是,所以我可以应用正确的代码片段每个案例,这都是我的大问题!

2 个答案:

答案 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));
...

如果它不是一个放气的流,你将得到一个异常,然后保留字节