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

标签 java

我该如何将其从加载 .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");
        }

最佳答案

bintxt 只是名称的一部分。不过,按照惯例,txt 文件包含使用多种字符编码之一进行格式化的数据。常见的编码是 UTF-8 和 ASCII 的扩展。 “编码”只是字节序列到字符的映射。例如,在 UTF-8 中,a 映射到 8 位序列 01100001(十六进制的 61)。实际上,所有文件都存储为一系列 01,但 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/

相关文章:

java - 将 Content-ID 添加到多部分实体

java - 更改/删除默认标记/关注元素

java - Xuggler 无法打开输出 url 错误

java - 在虚拟机上运行 selenium grid 的问题

java - O/S 将 Chronicle 文件刷新到磁盘导致非常高的延迟?

java - 给定值必须是动态下拉列表中默认显示的值 - JAVA

java - spring在redis中存储session的方法

java - 从 PDF 中提取的图像水平碎片化

java - 多 IDE 版本控制的 Java 项目 - 是否可以无缝地做到这一点?

java - 与 zip aws S3 对象相关的类和接口(interface)有哪些?