我正在设置一个软件,该软件在字节[]中发送消息并接收字节流。 例如,发送数组
byte[] replayStatuse = new byte[] { 0x55, (byte) 0xAA, 0x0B, 0x00, 0x0A,
0x1C, 0x03, 0x41, 0x01, 0x00 }
,我收到类似的信息。我使用PacketSender进行了测试,当我询问状态时可以在十六进制中看到答案。 我正在使用
InputStream socketInputStream = socket.getInputStream();
我已经尝试过在堆栈和其他论坛上找到的各种方法,但是没有用。 像这样的方法:
int read;
while((read = socketInputStream.read(buffer)) != -1)
{
String output = new String(buffer, 0, read);
System.out.print(output);
System.out.flush();
}
我尝试使用char,byte或其他格式的int读取,但是什么也没有。在我的控制台中,它会打印出奇怪的字符(U)
我正在使用:
InputStream socketInputStream = socket.getInputStream();
socketInputStream.read();
我希望获得一个byte []并且可以使用以下功能进行读取:
System.out.println(Arrays.toString(byteArray));
因此我可以处理各种情况,并在需要时转换为String或HEX 谢谢大家
答案 0 :(得分:0)
字符'U'并不奇怪,它是十六进制值0x55的ASCII字符(即与测试数组中的第一个值相同)。数组中接下来的几个值可能会抛出print语句。我建议检查/显示“缓冲区”的长度,以使您知道在数组中放置了多少字节。
答案 1 :(得分:0)
我不确定我是否完全理解您的问题,但请尝试
从一开始,您就拥有一个字节源,我将假定大小是未知的。
byte[] buffer = new byte[4096]; //I assume you have something like this
//Lets use this to accumulate all the bytes from the inputstream
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
int read;
while((read = socketInputStream.read(buffer)) != -1)
{
byteStream.write(buffer, 0, read); //accumulates all bytes
}
byteStream.flush(); //writes out any buffered byte
byte[] allBytesRead = byteStream.toByteArray(); //All the bytes read in an array
这是已发送的所有字节。假设您要以十六进制打印每个字节
for(byte b : allBytesRead) {
//might not be a good ideia if its something big.
//build a string with a StringBuilder instead.
System.out.println(String.format("%02X", b));
}
现在由您决定如何处理这些字节。