【问题标题】:Removing the first 16 bytes from a byte array从字节数组中删除前 16 个字节
【发布时间】:2011-09-20 03:18:31
【问题描述】:

在 Java 中,如何获取一个 byte[] 数组并从数组中删除前 16 个字节?我知道我可能必须通过将数组复制到新数组中来做到这一点。任何示例或帮助将不胜感激。

【问题讨论】:

    标签: java bytearray


    【解决方案1】:

    参见Java library 中的Arrays 类:

    Arrays.copyOfRange(byte[] original, int from, int to)
    

    from 是包容性的,而to 是独占性的。两者都是从零开始的索引,所以要删除前 16 个字节

    Arrays.copyOfRange(original, 16, original.length);
    

    【讨论】:

      【解决方案2】:
      byte[] a;
      
      ...
      
      if(a.length > 1) {
          byte[] newA = new byte[a.length-2];
          for(int i = 2; i < a.length; ++i)
              newA[i-2]=a[i];
      }
      

      【讨论】:

        【解决方案3】:
        void remove(byte[] b)
        {
            for(i=16;i<b.length;i++)
            {
                a[i-16]=b[i];
                Process... arrays
            }
        }
        

        【讨论】:

        • @Machavity 我认为如果您跟踪“i”值,就没有更好的解释了。 “a”是现有数组“b”中的一个新数组。当您想消除前 16 个元素时,您开始从该位置 (i=16) 写入新数组的元素,并且 a[i-16] 是新数组的第一个字节,因此复制到旧数组的最后一个值字节数组。
        【解决方案4】:

        System.arraycopy() 也可以这样做:

        public static byte[] truncate(byte[] bytes, int srcPos, int newLength) {
            if (bytes.length < newLength) {
                return bytes;
            } else {
                byte[] truncated = new byte[newLength];
                System.arraycopy(bytes, srcPos, truncated, 0, newLength);
                return truncated;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-25
          • 2020-11-19
          • 1970-01-01
          • 2014-06-29
          相关资源
          最近更新 更多