golangでint32のバイナリ配列をそのままファイルIOすんのできない?https://t.co/XEMfG9ObUXが意外に重い。
— 48 (@bleu48) January 12, 2019
その後解決したのでメモっておく。
参考にしたのは以下のところ。
要点だけ引っ張ったコードが以下になる。
KPP := make([]int16, 81*1548*1548*2)
file, err := os.Open("eval/KPP_synthesized.bin")
p_kpp := (*[2 * 81 * 1548 * 1548 * 2]byte)(unsafe.Pointer(&KPP[0]))[:]
file.Read(p_kpp)
int16のスライスの先頭アドレスをバイト列のポインタにキャストしてあげている。
結果はエンディアン依存することになるけど,そもそもbinary.Readが重い理由が全データをエンディアン変換をしてるからなんだよね。
使いまわさない前提でローカル運用するコードだから許して下さい。