我该如何将其从加载 .bin 更改为 .txt。我希望将 .txt 文件的信息像 .bin 文件一样放入 hashmap 中。
public static int currency;
public HashMap<Integer, Shop> cars = new HashMap<Integer, Car>();
public void load() {
try {
@SuppressWarnings("resource")
RandomAccessFile carFile = new RandomAccessFile("data/cars.bin", "r");
int carsAmt = carFile.readShort();
for (int carId = 0; carId < carAmt; carId++) {
int carId = carFile.readShort();
int currency = carFile.readShort();
int[] cars = new int[carFile.readByte()];
int[] amounts = new int[cars.length];
boolean isTruck = carFile.read() == 1;
for (int carData = 0; carData < cars.length; carData++) {
cars[carData] = carFile.readShort();
amounts[carData] = carFile.readInt();
}
cars.put(carId, new Car(carId, currency, isTruck, cars, amounts, true));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Loaded " + cars.size() + " Cars");
}
最佳答案
bin
和 txt
只是名称的一部分。不过,按照惯例,txt
文件包含使用多种字符编码之一进行格式化的数据。常见的编码是 UTF-8 和 ASCII 的扩展。 “编码”只是字节序列到字符的映射。例如,在 UTF-8 中,a
映射到 8 位序列 01100001
(十六进制的 61
)。实际上,所有文件都存储为一系列 0
和 1
,但 txt
文件通常仅根据其编码存储序列。相比之下,bin
文件将包含以“二进制”格式存储的数据;也就是说,其中的数据与任何类型的文本编码都不匹配。在您的例子中,bin
文件仅包含一组以其二进制表示形式存储的数字(即一系列位或 0 和 1)。
你的问题的答案是你将不得不重写这段代码。由于您现在想要读取文本文件而不是直接使用二进制值,因此您需要一个可以将 txt
文件解码为 String
的阅读器,然后您还需要将这些String
转换为数值。 (此步骤称为“解析”。)
您将需要知道txt
文件的编码才能正确读取它。 RandomAccessFile
有一个读取 UTF-8 编码文本的方法,但如果它采用其他编码,则需要在其他地方查找。请参阅this answer有关使用 BufferedReader 的一些信息。您还可以找到Scanner
类有用。 扫描仪
可以在读取值时为您解析这些值。
关于Java从.bin文件转换为.txt加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19738612/