gpt4 book ai didi

java - 从 RandomAccessFile 中读取特定字节并测试它们是否等于 0

转载 作者:行者123 更新时间:2023-11-30 11:18:58 25 4
gpt4 key购买 nike

第一次发贴在这里。预先感谢您查看我的问题。我在家庭作业问题上遇到了很多麻烦,我必须从 RandomAccessFile 中读取特定范围的字节,然后检查该字节范围以查看它们是否都等于 0。我到处寻找一些东西与此有关,但我发现没有任何内容恰到好处。我们将不胜感激。

问题告诉我们,有一个特定的文件包含学校中假设学生的数据。这些学生中的每一个都用 40 个字节的代码表示,但是我们文件的前四个字节必须是一个整数,表示学校的学生总数(假设有 75 个)。字节 4 到 43 代表第一个学生 (#0),字节 44 到 83 代表第二个 (#1) 等等。当学生转到另一所学校时,他们的 40 个字节将被全 0(字符)覆盖。

我写了一个名为“transferStudent”的方法,它接受一个代表文件名的字符串和一个代表学生人数的整数。如果有任何异常或者文件由于某种原因没有覆盖学生的数据,我返回 false;

这是我到目前为止的工作:

public static Boolean transferStudent(String fileName, int studentNum) {

RandomAccessFile file = new RandomAccessFile(fileName, "rw");
file.writeInt(75);
try {
if (studentNum == 0) {
file.seek(4);
file.writeBytes("0000000000000000000000000000000000000000"); // 40 zero characters
file.seek(4);
for (int i = 0; i < 40; i++) {
if (file.read() == 0) {
return true;
}
}
return false;
}
else if (studentNum > 0) {
file.seek(4 + (studentNum * 40));
file.writeBytes("0000000000000000000000000000000000000000"); // 40 more zeroes
file.seek(4);
for (int i = (4 + (studentNum * 40)); i < (44 + (studentNum * 40)); i++) {
if (file.read() == 0) {
return true;
}
}
return false;
}
else {
return false;
}
}
catch (Exception e) {
return false;
}
}

每当我查看已创建的二进制文件时,与 studentNum 对应的范围内确实有 0。但是,控制台总是打印错误 - 由于某种原因检查不工作。我快要为此撕破头发了。请帮忙!

最佳答案

您将 ASCII 零“0”与二进制零混淆了。您正在编写前者并测试后者。 ASCII“0”占用两个字节。请注意,“字符”和“字节”在 Java 中不同。

关于java - 从 RandomAccessFile 中读取特定字节并测试它们是否等于 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508009/

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