如何在Java中将二进制数据输出到文件中?

2022-09-02 19:57:52

我正在尝试将数据写入二进制格式的文件以进行压缩。数据完全由浮点组成,因此我决定将数据量化为0到65535之间的整数,以便数据可以写入两位无符号整数并最终节省空间。但是,我需要将量化数据输出到二进制文件中,而不是人类可读的Ascii。

目前,这就是我正在做的事情

@param输出将包含已量化数据的文件作为字符串存储在.txt文件中

public void generateBinaryRioFile(String materialLibrary,
        String outputFile, String group, String mtlAux) {

    try {

        // Create file
        FileWriter fileStream = new FileWriter(outputFile);
        try {

            BufferedReader br = new BufferedReader(new FileReader(new File(
                    "idx.txt")));

            while ((line = br.readLine()) != null) {
                writer.write(line + "\n");
            }
            try {
                br.close();

            } catch (FileNotFoundException e) {
                e.getMessage();
            } catch (IOException e) {
                e.printStackTrace();
            }           BufferedWriter writer = new BufferedWriter(fileStream);

但是,这将作为人类可读的字符串写入文件。我需要将其编写为二进制数据。如何在Java中执行此操作?


答案 1

也许这个片段会有所帮助。

 int i = 42;
 DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
 os.writeInt(i);
 os.close();

答案 2

那么 DataOutputStream 呢?您可以编写包含 2 个数据整数的 int。

DataOutputStream dos = new DataOutputStream(new FileOutputStream(<path>));
ArrayList<Integer> list = new ArrayList<Integer>();
int sum;
for( int i = 0; i < list.size(); i++ ) {
    if(i%2!=0){
        sum |= list.get( i ).intValue()<<16;
        dos.writeInt( sum );
    } else {
        sum = list.get( i ).intValue();
    }
}

推荐