如何在没有arraycopy的情况下使用byte []的一部分?

时间:2011-06-14 07:43:07

标签: java byte

我想知道如何使用byte []的一部分而不使用arraycopy?

用C语言

char buf[100];
int i;

for (i = 0; i < 100; i += 10) {
    proc(buf + i);
}

在Java中

byte[] buf = new byte[100];
int i;

for (i = 0; i < 100; i += 10) {
    proc(buf + i);
}

没有用。

byte[] buf = new byte[100];
int i;

for (i = 0; i < 100; i += 10) {
    byte[] temp = new byte[10];
    System.arraycopy(buf, i, temp, 0, 10);
    proc(temp);
}

只能运作。

但是,我不喜欢arraycopy。

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:8)

您可以随时扩展“proc”功能以获取3个参数:

proc(byte[] a, int offset, int length)

这是模仿Java中C阵列功能的最佳方式。

答案 1 :(得分:3)

班级java.util.Arrays有一些有用的方法,如:

byte[] buf = new byte[100];
int i;

for (i = 0; i < 100; i += 10) {
    proc(Arrays.copyOfRange(buf, i, buf.length));
}

更多:copyOfRange

答案 2 :(得分:1)

只需将索引参数传递给proc

即可
void proc(byte[] array, int index)
{
    for (int i = index; i < array.length; ++i)
    {
        // do something   
    }     
}

答案 3 :(得分:1)

尝试使用以下代码而不是arraycopy

byte[] buf = new byte[100];
        int i;

        for (i = 0; i < 100; i += 10) {
            byte[] temp = new byte[10];
                  temp[i%10] = buf[i];



        }

由于 迪帕克

答案 4 :(得分:1)

由于没有任何答案包括ByteBuffer,我将展示另一种方式:

import java.nio.ByteBuffer;

public class ProcByteBuffer {

    private static final int BUF_SIZE = 10;
    private static final int BIG_BUF_SIZE = 10 * BUF_SIZE;

    public static void proc(final ByteBuffer buf) {

        // for demo purposes
        while (buf.hasRemaining()) {
            System.out.printf("%02X", Integer.valueOf(buf.get() & 0xFF));
        }
    }

    public static void main(String[] args) {
        final ByteBuffer bigBuf = ByteBuffer.allocate(BIG_BUF_SIZE);

        // for demo purposes
        for (int i = 0; i < BIG_BUF_SIZE; i++) {
            bigBuf.put((byte) i);
        }
        bigBuf.position(0);

        for (int i = 0; i < BIG_BUF_SIZE; i += BUF_SIZE) {
            bigBuf.position(i);
            bigBuf.limit(i + BUF_SIZE);
            proc(bigBuf.slice());
        }
    }
}

切片的任何更改(proc()的buf参数都将对底层数组可见。

答案 5 :(得分:0)

在C中,数组只是一个指向内存中某处的指针,而buf + i具有意义(它意味着内存中的一个位置是i字节 - 也是一个数组)

在java中,Array是一个附加长度和代码的对象。没有办法引用“数组内部的数组”,而“+”运算符没有意义。