Как читать в writeBin () вывод из R в Java? - PullRequest
1 голос
/ 03 апреля 2020

Рассмотрим следующий код R:

f <- file("test.txt", "wb")
writeBin(c(1.2, 2.3, 3.4), f)
close(f)

Я написал следующий код в Java, чтобы попытаться прочитать эти данные:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.PrintWriter;

public class readBinary {

    public static void main(String[] argv) throws IOException {
        DataInputStream fileIn = new DataInputStream(new FileInputStream(argv[0]));
        FileOutputStream fileOut = new FileOutputStream(argv[1]);
        PrintWriter fileOutWriter = new PrintWriter(fileOut);

        int rows = Integer.parseInt(argv[2]);
        int cols = Integer.parseInt(argv[3]);

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                fileOutWriter.print(fileIn.readDouble() + " ");
            }
            fileOutWriter.println();
        }
        fileOutWriter.close();
    }

}

В командной строке:

javac readBinary.java
java readBinary test.txt test_new.txt 3 1

Файл test_new.txt выводит:

4.667261458438315E-62 
1.9035985662475526E185 
4.667261458387024E-62 

Так что Java неправильно подхватывает три двойки.

Итак, я спрашиваю, что точно является выводом writeBin, и как его можно прочитать в Java, чтобы намеченные числа были правильно прочитаны?

1 Ответ

2 голосов
/ 03 апреля 2020

Java в старшем порядке по умолчанию. Поэтому, пожалуйста, попробуйте использовать writeBin(..., endian = "big")

f <- file("test.txt", "wb")
writeBin(c(1.2, 2.3, 3.4), f, endian = "big")
close(f)
...