如何从Java中的字节数组中删除前4个字节?

Mil*_*ler 3 java arrays bytearray datainputstream

我有一个名为的字节数组byteArr[]。我需要从中删除前4个字节。我的代码如下所示。在这里我使用字节数组存储输入字符串。我在输出中得到了一些不需要的字节,即从第五个开始不需要前四个字节是正确的。我的程序是使用rfid机器从受尊敬的rfid标签中获取ID。

public class Serverc {

    final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();

    public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];

        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

    public static void connection() throws IOException {

        ServerSocket ss = new ServerSocket(9888);//exce
        ss.setSoTimeout(300000000);//exce
        System.out.println("Waiting for client on port " + ss.getLocalPort() + "...");

        while (true) {

            Socket server = ss.accept();//exce
            System.out.println("Just connected to " + server.getRemoteSocketAddress());

            int available = 0;
            DataInputStream in = new DataInputStream(server.getInputStream());//exce
            int input = 0;
            //BufferedReader br = new BufferedReader(in);
            byte byteArr[] = new byte[28];

            try {
                //read till the end of stream
                //while((input = in.available()) != -1)
                while ((input = in.read(byteArr)) != -1) {
                    System.out.println("Size read is " + input);
                    System.out.println("Data is " + bytesToHex(byteArr));
                }

                //System.out.println("inside finally");
                server.close();//exce
                //System.out.println("outside finally");
            } catch (SocketTimeoutException ex) {
                System.out.println("Socket timed out!");
            }

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        }
    }

    public static void main(String args[]) throws IOException {
        Serverc obj = new Serverc();
        obj.connection();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制台

Waiting for client on port 9888...
Just connected to /106.208.71.50:61532
Size read is 28
Data is 55000016910001DB00FB63ABEEAFC1EC888F10263410050711148F3500000000
Size read is 28
Data is 55000016910001DB00FB63ABEEAFC1EC888F10263410050711148F3500000000
Size read is 28
Data is 55000016910001DB00FB63ABEEAFC1EC888F10263410050711148F3500000000
Size read is 28
Data is 55000016910001DB00FB63ABEEAFC1EC888F10263410050711148F3500000000
Size read is 28
Data is 55000016910001DB00FB63ABEEAFC1EC888F10263410050711148F3500000000
Run Code Online (Sandbox Code Playgroud)

在这里,我需要从输出中删除55000016。预先感谢

小智 5

您可以使用Arrays.copyOfRange方法来过滤不需要的字节并将结果保存到新的字节数组中。

byte[] filteredByteArray = Arrays.copyOfRange(byteArr, 4, byteArr.length - 4);
Run Code Online (Sandbox Code Playgroud)

  • 这段代码中实际上存在一个错误。应该是byte [] filteredByteArray = Arrays.copyOfRange(byteArr,4,byteArr.length); (7认同)