java - 从列表中向 RandomAcessFile 添加和读取整数。除了最后一个似乎都是“0”
问题描述
我正在尝试将列表中的五个随机数写入文件。我想我正在设法写一些东西,但是当我尝试读取文件时,0
除了最后一个之外,它们都是。我已经搜索过,但我发现的大部分内容只是解释了如何编写一个 int/string。我认为问题出在我的写作方式上。writeInt
写为四个字节,也许我没有seek()
按照规定使用。
这是我的代码。
try {
RandomAccessFile ficheroJugador1 = new RandomAccessFile("jugador1.dat", "rw");
for (int i = 0; i < 5; i++) {
try {
ficheroJugador1.seek(i);
int numEscribir = jugador1.numerosAleatorios.get(i);
ficheroJugador1.writeInt(numEscribir);
} catch (IOException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 5; i++) {
try {
ficheroJugador1.seek(i);
try {
System.out.println(ficheroJugador1.readInt());
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
ficheroJugador1.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
这导致:
Numbers [10, 9, 3, 8, 7] //我要读写的数字
0
0
0
0
7
解决方案
正如你所说,如果没有正确使用 seek ,你会覆盖最后保存的数字
(ascii representation)
0010
^
00009
^
000003
^
000008
^
00000007
^
如果您更改ficheroJugador1.seek(i);
为,ficheroJugador1.seek(i*4);
您将正确地为每个数字提供其空间
(ascii representation)
00100009000300080007
推荐阅读
- vhdl - "Readline called past the end of file" error VHDL
- c# - 如何从 DynamoDb 获取所需格式的对象
- elasticsearch - Unable to use painless in elasticsearch query
- c - I can not work with linked list inside linked list
- docker - Redis 数据被 Docker 入口点覆盖
- sql - 为批量删除操作禁用和启用或删除和创建非聚集索引
- single-sign-on - SP 发起的 SSO 和 IDP 发起的 SSO 之间的 SAML 响应差异
- reactjs - 如何通过父数组reactjs的键映射子数组
- c++ - 基于模板类型的枚举值
- java - 我的 Spring Security 项目中的 BCrypt (Spring security)