Julia バイナリファイルを読み書きする

本記事では、Juliaでバイナリファイルを読み書きする方法を紹介します。

バイナリファイルとは

コンピューターが処理しやすい形で書かれたデータファイルの事を指します。

二進数で書かれていることが多く、人間の目には何が書いてあるかなかなか理解できません。

バイナリファイルを読む

data = zeros(Float32,(32,32))
open("/home/hogehoge/sample.dat") do file
    read!(file,data)
end

1行目で、32×32の32bitの浮動小数点数型で読み込みます。

あくまでも例なので、適時、データサイズ、データタイプは変えてくださいね。

2行目以降で、open関数でバイナリファイルのデータをdata配列に格納しています。

以上、簡単に読み込むことが出来ました。

異なるシステムで生成されたデータを読むとき

システムによっては、データをメモリに格納する方法が違うことがあります。

ビックエンディアンは、4バイトデータを前から順に格納する方法で

リトルエンディアンは、4バイトデータを後ろから順に格納する方法です。

ビックエンディアンデータ

リトルエンディアンで、ビックエンディアンデータを読むには、

先ほどのdata配列に以下のように記述することで可能です。

data .= ntoh.(data)

リトルエンディアンデータ

ビックエンディアンで、リトルエンディアンデータを読むには、

先ほどのdata配列に以下のように記述することで可能です。

data .= ltoh.(data)

バイナリファイルを書く

data = rand(Float32,(32,32))
write("test.bin",data)

1行目で、32×32の32bitの浮動小数点数型の乱数を生成し、

2行目で書き出しています。

異なるエンディアンで書き出す場合

ビックエンディアンデータ

リトルエンディアンでビックエンディアンデータとして書き出すには、

先ほどのdata配列に以下のように記述することで可能です。

data .= hton.(data)

リトルエンディアンデータ

ビックエンディアンでリトルエンディアンデータとして書き出すには、

先ほどのdata配列に以下のように記述することで可能です。

data .= htol.(data)