我有临危以下类型的消息的网络套接字:(每秒约24)读取线和字节[]从输入流
命令EG:
[Pos,1,2,3,4,1,2,3,4]\n
图片:
[IMG,36000]\nbyte[36000]
(字节[36000]为36000个字节的数组)
因此,我需要一个读卡器该流,其能够读取线和字节[]。问题是,BufferedReader转换字符集,这对图像来说非常非常糟糕,所以读取字符串并将其转换为字节似乎不是一种选择。
我试图将一个DataInputStreamReader和一个BufferedReader连接到流中,但它似乎在读取器第一次更改后中断,但我不确定导致该问题的原因。
显而易见的解决方案是:
char c;
String s = "";
do{
c= (char)read.read(); //maybe charset conversion here
s+=c;
}while(c!= "\n");
if(s.startsWith("[IMG")){
int len = Integer.parseInt(s.split(",")[1]);
byte[] img = new byte[len];
read.read(img);
...
但是我正在寻找一个更好的,我需要较少的手动操作。
- 什么是处理这个问题的推荐方法?
- 有没有方法 连接两个或更多的读者到输入流?
- 有读者可以读取字节[]和字符串?
- 将所有内容写入byte []并读取它可能更容易吗? (我怎么知道,什么时候停止阅读?)
- 我可以防止混乱字节[]的图表类型转换吗? (然后我可以使用缓冲阅读器)
在最简单的情况下,我可以写代码:(这实际上是没有太大的:d)
String s = read.readLine();
String[] parts = s.split(",");
if(parts[0].equals("[IMG")){
byte[] img = new byte[Integer.parseInt(parts[1])];
read.readByte(img);
...
问题是,我每秒会收到至少24条这样的消息,因此即使接受所有消息的部分也变得困难,我仍然需要读取帧并检查它们的行结束符,如果它们包含一个,我可以解析该命令,然后读取指定的长度,并将其余的缓冲区添加到读取数据的前面,这是我想要省下的努力。 –
HTTP会有类似Content-Type这样的空行的标题行,然后是二进制或文本数据。 –