Java 读取二进制TCP数据:正确的流类型

Java 读取二进制TCP数据:正确的流类型,java,Java,在readMessage函数中,我得到错误消息“OutputStream是抽象的;无法实例化”。我应该使用哪种数据类型来存储读取的数据?请忽略返回值是字符串 private String readMessage() throws IOException { byte[] messageChunk = new byte[1024]; int bytesRead = 0; OutputStream messageData = new OutputStream(); boolean

在readMessage函数中,我得到错误消息“OutputStream是抽象的;无法实例化”。我应该使用哪种数据类型来存储读取的数据?请忽略返回值是字符串

private String readMessage() throws IOException {
  byte[] messageChunk = new byte[1024];
  int bytesRead = 0;
  OutputStream messageData = new OutputStream();

  boolean end = false;

  while ( !end ) {
    bytesRead = in.read(messageChunk);
    if ( bytesRead > 2 && messageChunk[bytesRead - 2] == '\r' ) end = true; // TODO: is -2 correct?
    else if ( bytesRead == 1 && messageChunk[bytesRead - 1] == '\n' ) end = true;
    messageData.write(messageChunk, 0, bytesRead);
  }

  return messageData.toString();
}

在我看来,您想要的似乎不是这些,而是一个
BufferedReader
,整个方法简化为
returnreader.readLine()这是因为OutputStream类是一个抽象类。在没有实现的情况下,不能使用new关键字从抽象类创建实例


为什么不使用
ByteArrayOutputStream
而不是
OutputStream

取决于数据存储的位置。如果在文件中,请使用“我希望进一步处理数据”。我遵循的协议使用混合文本和二进制数据。在这种情况下,您可能需要使用
ByteChannel
。你至少知道不同部分的长度吗?是的-长度在二进制数据之前传输。协议使用混合二进制和文本数据。例如,读取的消息可能是“发送5字节长的数据:ř)#4í\r\n”