Java从.bin文件转换为.txt加载

时间:2013-11-02 03:17:45

标签: java

如何将此更改从.bin加载到.txt。我想将.txt文件中的信息放入hashmap中,就像.bin文件一样。

    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");
        }

1 个答案:

答案 0 :(得分:2)

bintxt只是名称的一部分。但是,按照惯例,txt文件包含使用多种字符编码之一格式化的数据。常见的编码是UTF-8和ASCII的扩展。 “编码”只是字节序列到字符的映射。例如,在UTF-8中,a映射到8位序列01100001(十六进制的61)。实际上,所有文件都存储为一系列01 s,但txt文件通常只根据其编码存储序列。相反,bin文件将包含以“二进制”格式存储的数据;也就是说,它们中的数据与任何类型的文本编码都不匹配。在您的情况下,bin文件只包含一组存储为二进制表示的数字(这是一个位或0和1的序列)。

你的问题的答案是你将不得不重写这段代码。由于您现在想要阅读文本文件而不是直接使用二进制值,因此您需要一个能够将txt文件解码为String的阅读器,然后您还需要转向那些String成为数值。 (此步骤称为“解析”。)

需要知道txt文件的编码才能正确读取它。 RandomAccessFile有一种方法可以读取UTF-8编码文本,但是如果它采用其他编码,则需要查看其他地方。有关使用BufferedReader的一些信息,请参阅this answer。您可能还会发现Scanner类很有用。 Scanner可以在读取值时为您解析值。