Genta Hirauchi

公開日: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されておりますので、上記の処理で、全体のデータを取得することができます。