AndroidのNio.ByteBufferでURIコンテンツをラップする方法?
-
21-12-2019 - |
質問
AndroidのURIからコンテンツを読み込もうとしています。
ContentResolverを介して、InputStreamに手を差し伸べることができますが、Nio.ByteBufferでそれをラップする方法は見つかりませんでした。
URIコンテンツをAndroidのNio.ByteBufferに変換する方法はありますか?
解決
ローカルにURIの内容をダウンロードし、他のメソッドを介してそれを開いた.ByteBuffer
を取得する他のヒント
活動に取り組んでいるとします、
private ByteBuffer getByteBuffer(Uri uri){
try{
InputStream iStream = getContentResolver().openInputStream(uri);
if(iStream!=null){
//value of MAX_SIZE is up to your requirement
final int MAX_SIZE = 5000000;
byte[] byteArr = new byte[MAX_SIZE];
int arrSize = 0;
while(true){
int value = iStream.read(byteArr);
if(value == -1){
break;
}else{
arrSize += value;
}
}
iStream.close();
return ByteBuffer.wrap(byteArr, 0, arrSize);
}
}catch(IOException e){
//do something
}
return null;
}
.
注:
(i)InputStream.read(byte[] b)
は毎回バイト配列b
に読み込まれた合計バイト数を示す整数を返します。
(ii)InputStream.read(Byte[] b)
が-1を返すと、それがInputStreamの終わりであることを示します。
(iii)arrSize
は、読み込まれた合計バイト数、すなわちbyte[] b
(iv)ByteBuffer.wrap(byte[] b, int offset, int length)
はバイトアレイを包み、ByteBufferを与える。このリファレンス
間違いがある場合、またはそれをする方法がある場合は、コメントをお気軽にやめたり変更したりしてください。幸せなコーディング
所属していません StackOverflow