Q:

Как прочитать бинарный файл на kotlin

У меня есть бинарный файл, в котором записаны некоторые характеристики звёзд, в силу особенностей этих характеристик, поля записи не одинаковы.  В c++ я могу прочитать файл следующим образом 
ifstream file;
file.open(PATH, ios::in | ios::binary);    
int a;
file.read((char*)&a, sizeof(int));

Использовать функции вроде getline() не дают мне удобоваримых чисел, а только разные символы.  Я хочу попробовать аналогичным образом прочитать файл в котлине.  Я пробовал использовать классы FileInputStream и RandomAccessFile, но оба не работают так как надо.  Каким образом я могу прочитать данные из файла?  Ну и прошу объяснить почему тот код, который я привёл работает, а та же функция getline() - нет. ( Интерес скорее спортивный, чем из необходимости, но всем спасибо за помощь)

A:

Метод getline не предназначен для работы с бинарными файлами, только с текстовыми.  
Для чтения данных из бинарных файлов нужно использовать DataInputStream:
import java.io. DataInputStream
import java.io. File

fun main() {
    val stream = DataInputStream(File("data.bin").inputStream())

    // Будет прочитано 4 байта и интерпретировано как знаковый int с порядком байт big endian:
    val i = stream.readInt();

    // Если нужно little endian:
    val j = Integer.reverseBytes(i)

    stream.close()

    println(i)
    println(j)
}

К примеру, если в файле 4 байта: 0A 00 00 00
Вывод будет такой:
167772160
10

Детали работы подобных методов для других типов данных можно посмотреть в описании интерфейса DataInput (раздел "Method Detail"), реализацией которого является класс DataInputStream.