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