在Java中处理来自套接字的特定字节

时间:2016-04-04 08:16:18

标签: java

我正在使用下面的代码来读取Unix套接字:

    Boolean flag = false;
    while (!flag) {
        try {
            File socketFile = new File("./RISP");
            AFUNIXSocket sock = AFUNIXSocket.newInstance();
            sock.connect(new AFUNIXSocketAddress(socketFile));
            System.out.println("!!!!!!!!!!CONNECTED!!!!!!!!!");
            flag = true;
            BufferedReader input = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            String line = null;
            while ((line = input.readLine())!=null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("NOT CONNECTED....." + e);
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException inter) {
            System.out.println(inter);
        }
    }

我需要读取每个包的前4个字节并将它们从二进制转换为整数。

我阅读了很多帖子,但我仍然在寻找解决问题的最佳方案。

2 个答案:

答案 0 :(得分:1)

Reader and Writer专为阅读文本而设计。

对于binary,你应该尝试InputStream和OutputStream,在这种情况下,你想要DataInputStream,可能是缓冲的。

DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

int len = in.readInt(); // read big-endian.
if (LITTLE_ENDIAN)
    len = Integer.reverseBytes(len);
byte[] bytes = new byte[len];
in.readFully(bytes);

答案 1 :(得分:0)

似乎有效

DataInputStream in = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
                int len = -1;
                while ((len = in.readInt()) != -1) {
                    len = Integer.reverseBytes(len);
                    byte[] bytes = new byte[len];
                    in.readFully(bytes);
                    if (bytes.length > 4) {
                        System.out.println(" BYTE0: " + bytes[0] +
                                           " BYTE1: " + bytes[1] +
                                           " BYTE2: " + bytes[2] +
                                           " BYTE2: " + bytes[3] +
                                           " LENGHT: " + bytes.length);
                    }
                }

请让我知道我错过了什么。 非常感谢你们。