uah*_*kan 4 java sockets datainputstream
我在客户端上有以下代码:
DataInputStream dis = new DataInputStream(socketChannel.socket().getInputStream());
while(dis.available()){
SomeOtherClass.method(dis);
}
Run Code Online (Sandbox Code Playgroud)
但是available()
不断返回0
,尽管流中有可读数据。因此,在要读取的实际数据完成之后,空数据将传递到另一个要读取的类,这将导致损坏。
经过一番搜索;我发现available()
在与套接字一起使用时这是不可靠的,我应该从流中读取前几个字节以实际查看是否有数据可解析。
但就我而言 我必须将DataInputStream
我从套接字获得的引用传递给我无法更改的其他类。
是否可以从中读取一些字节DataInputStream
而不破坏它,或者有其他建议?
在两者之间放置PushbackInputStream可以读取一些字节,而不会破坏数据。
编辑:下面未经测试的代码示例。这是从内存中来的。
static class MyWrapper extends PushbackInputStream {
MyWrapper(InputStream in) {
super(in);
}
@Override
public int available() throws IOException {
int b = super.read();
// do something specific?
super.unread(b);
return super.available();
}
}
public static void main(String... args) {
InputStream originalSocketStream = null;
DataInputStream dis = new DataInputStream(new MyWrapper(originalSocketStream));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9273 次 |
最近记录: |