android - 如何从socket读取特定的字节数?

时间:2016-01-23 20:49:44

标签: java android sockets msgpack

在我的系统中,我使用tcp在Android应用程序和桌面应用程序(在Qt中开发)之间传输消息。

我正在使用hash库来序列化/反序列化两个应用程序中的结构。为了确保结构总是作为一个整体被接收,我总是发送字节数(编码为32位大端无符号整数,不使用msgpack,这样它总是占用前4个字节)在消息本身之前(在msgpack中编码)。如果有更好的方法请告诉我。

在Android应用程序中,我将前4个字节读入msgpack并将其解码为byte[],接下来我需要一种方法让线程保持阻塞直到下一个long msgSize接收到的字节数。在阅读其他问题和答案后,我想我可以这样写:

msgSize

之后我可以将msg数组与msgpack一起使用,我确信收到了整条消息。

所以:

  1. 是我对InputStream is= sock.getInputStream(); byte[] msgSizeBuff= new byte[4]; is.read(msgSizeBuff, 0, 4); long msgSize= MyDecodeFunction(msgSizeBuff); DataInputStream dis = new DataInputStream(is); byte[] msg = new byte[msgSize]; dis.readFully(msg); 类的使用,我保证我会等到收到指定的字节数吗?因为他们在reference说:
  2.   

    如果字节不足,则抛出EOFException。

    1. 我想要一种方法告诉这个线程取消操作,那么如果另一个线程调用DataInputStreamsocket.close()会发生什么,我会得到一个例外吗?

0 个答案:

没有答案