gpt4 book ai didi

java - 尝试读取二进制保存的整数时 readInt() 不起作用

转载 作者:行者123 更新时间:2023-12-02 10:58:34 30 4
gpt4 key购买 nike

我尝试将一些整数和 double 以二进制格式保存到 txt 文件。我认为数字保存正确,但问题是当我尝试使用 readInt() 读取整数时。例如,当整数的值为 12 时,该整数的程序输出为 208797696,并且具有更多整数的程序总是以 EOF 异常结束。 readDouble() 没有问题,它工作正常。

import java.util.Scanner;
import java.io.*;

public class CandyFruit {

public static void main(String[] args) throws IOException {
int i;
int int_sc ;
double double_sc;
String string_sc;
int seek_w = 0; //seek for writing

String map = "";
Scanner scan = new Scanner(System.in);
try (RandomAccessFile write = new RandomAccessFile("fgh.txt", "rw")) {

for (;;) {
System.out.println("1 - write int, 2 - write double, 0 - break");
i = scan.nextInt();
if (i == 0) break;
System.out.println("Your choice:");
if (i == 1) {
int_sc = scan.nextInt();
write_int(write, int_sc, seek_w);
map = map + "1";
seek_w += 4; //seek growth for int

}
else if (i == 2) {
double_sc = scan.nextDouble();
write_double(write, double_sc, seek_w);
map = map + "2";
seek_w += 8; //seek growth for double
}
}
}

//catch

try (RandomAccessFile read = new RandomAccessFile("fgh.txt", "rw")) {

int seek_r = 0;

for (int o = 0; o < map.length(); o++) {
char c = map.charAt(o);

if (c == '1') {
read_int(read, seek_r);
seek_r += 4; //seek growth for int

}
else if (c == '2') {

read_double(read, seek_r);
seek_r += 8; //seek growth for double
}


}
}

//catch

}

public static void write_int (RandomAccessFile write, int scanned, int s) throws IOException {
write.seek(s);
write.write(scanned);
}

public static void write_double(RandomAccessFile write, double scanned, int s) throws IOException {
write.seek(s);
write.writeDouble(scanned);
}

public static void read_int(RandomAccessFile read, int s) throws IOException {
read.seek(s);
System.out.println("Int is: "+read.readInt());
}

public static void read_double(RandomAccessFile read, int s) throws IOException {
read.seek(s);
System.out.println("Double is: "+read.readDouble());
}

}

最佳答案

您的 write_int 方法使用 RandomAccessFile.write() 进行写入,它将一个字节写入文件。当您使用 readInt() 时,您会读取该单个字节以及其他任意数据的三个字节(因为您没有写入它们)。

您应该在 write_int 中使用 RandomAccessFile.writeInt()

关于java - 尝试读取二进制保存的整数时 readInt() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51526068/

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