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

时间:2014-04-08 04:51:56

标签: java

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

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();
}

2 个答案:

答案 0 :(得分:1)

这是因为OutputStream类是一个抽象类。你无法使用new关键字从抽象类创建实例而没有实现。

为什么不使用ByteArrayOutputStream代替OutputStream

答案 1 :(得分:0)

在我看来,好像你想要的不是任何一个,而只是一个BufferedReader,这整个方法简化为return reader.readLine();但我不知道你为什么这么做发送长度字行终止符。考虑一下你的应用程序协议。