gpt4 book ai didi

java - java中的byte[]链表

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:40 25 4
gpt4 key购买 nike

我正在尝试创建一个包含字节数组的链表:

static Queue<byte[]> q = new LinkedList<byte[]>();
static byte buf[] = new byte[1024];

static void queueInit() throws IOException{
ByteArrayInputStream bis= new ByteArrayInputStream(buf);
DataInputStream ois= new DataInputStream(bis);

RandomAccessFile MyFile = new RandomAccessFile ("keys", "rw");
for(int r=0;r<90;r++){
MyFile.seek(r*1024);
MyFile.read(buf);
q.add(buf);
}
MyFile.close();
}

问题出在命令 q.add(buf); 处。缓冲区已加载正确的字节,但列表正在加载零。有帮助吗?:)

最佳答案

不,您的LinkedList只会有多个对相同数组的引用。您只创建一个字节数组 - 然后一次又一次地从文件中读取数据。

根本不清楚为什么将 buf 声明为静态变量,但您需要为列表中的每个元素创建一个数组:

for (int r=0;r<90;r++) {
byte[] buf = new byte[1024];
MyFile.seek(r * 1024);
MyFile.read(buf);
q.add(buf);
}

另请注意,您忽略了 read() 的返回值,该值指示已读取的字节数。您可能没有完全读取 1024 字节...在这种情况下您想做什么?

(另外,为什么要费力寻找,或者确实使用 RandomAccessFile?如果您想读取 1K block 中的前 90K,您可以按顺序执行此操作,根本不需要寻找。)

关于java - java中的byte[]链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com