公開日:2020/06/23更新日:2020/08/03
【Kotlin】ByteArrayOutputStreamで、readした全体のバイナリデータを取得する方法を解説

- readした全体のバイナリデータを取得したい
ファイルをreadで読み込む際、ファイルサイズが大きいと、一度に全てのデータをreadで読み込むことができないため、ループ処理でreadを繰り返し行う必要があります。
本記事では、ByteArrayoutputStreamを使用し、readで読み込んだ全体のデータを取得する方法を解説致します。
目次
ByteArrayOutputStreamで、readした全体のバイナリデータを取得する
読み込むデータについて
ByteArrayOutputStreamの解説するにあたり、A〜Zまでのアルファベットが書かれたsample.txtというファイルを使用したいと思います。
このファイルは、Android端末のsdcard直下に格納し、
Environment.getExternalStorageDirectory().absolutePath + “/sample.txt”
で参照できるように致します。
また、ファイルの読み込みには権限が必要ですが、今回はその実装を割愛させて頂きます。本記事の実装を真似してうまくいかなかった場合は、端末の設定からサンプルアプリを選択し、ストレージの権限をONにしてみてください。
なお、getExternalStorageDirectory()はDeprecatedになっており、Android10以上の端末ではエラーとなりますので、動作確認は、Android10未満の端末を使用してください。
ByteArrayOutputStreamの実装
以下は、sample.txtのデータを読み込み、ByteArrayOutputStreamで全体のデータを取得するサンプルコードです。1度のreadで全てのデータを読み込まないよう、1度に読み込むデータを8byteに制限しております。
ログ出力結果
[readしたデータ]
65, 66, 67, 68, 69, 70, 71, 72,
73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88,
89, 90,
[ByteArrayOutputStream.toByteArrayのデータ]
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
36行目のbyteArrayOutputStream.write(buffer, 0, readSize)
という部分で、readしたデータをByteArrayOutputStreamに書き込んでいます。この処理を、データの読み込みが完了するまで繰り返します。
全てのデータの読み込みが完了すると、while文を抜け、
43行目のval totalByteArray = byteArrayOutputStream.toByteArray()
という部分で、ByteArrayOutputStreamに書き込んだデータを取得しております。
ByteArrayOutputStreamには、readで読み込んだデータが全てwriteされておりますので、上記の処理で、全体のデータを取得することができます。