2017-01-23 13 views
0

uriを使用してファイルをロードする必要があります。 Uriは絶対パス(外部ボリューム)に変換することはできません。uriを使用してファイルをバイト配列に読み込みます

私は例が見つかりました:

private String readTextFromUri(Uri uri) throws IOException { 
    InputStream inputStream = getContentResolver().openInputStream(uri); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(
            inputStream)); 
    StringBuilder stringBuilder = new StringBuilder(); 
    String line; 
    while ((line = reader.readLine()) != null) { 
        stringBuilder.append(line); 
    } 
    fileInputStream.close(); 
    parcelFileDescriptor.close(); 
    return stringBuilder.toString(); 
} 

をしかし、私はバイトで読むためにそれを変更する方法を理解することはできません。

+0

ファイルを読み込んで、それをバイト配列にフックすることを意味しますか? – mob41

+0

シンプルなGoogle検索:http://stackoverflow.com/questions/35939527/android-how-read-file-to-byte-array私は既にFileInputStreamを絶対パスに使用していますが、今はuriで動作させる必要があります。 – Daimonium

+0

'"バイト単位で読み込む "?どういう意味ですか?あなたは:InputStream inputStream = getContentResolver()。openInputStream(uri); '読むために' InputStream'を使用します。 – pskink

答えて

1

pskink氏によると、あなたの主な問題は、InputStreamをReaderにラップしていることです。 Readerは、バイトを文字にデコードすることを意図しています。これは、定義によって、避けたいものです。バッファを確保し、それを埋めるためにInputStreamのreadメソッドを使用する必要があります。

受信したデータの処理中に、受信バイト数を知るか、複数回読み取る必要があることに注意してください。

また、readメソッドを使用してintを取得し、ストリームが終了したかどうかを確認し、そのintをバイトにキャストして1つずつ処理することもできます。しかし、通常は、バッファを使用したいと思っています。

+0

これは何か? 'InputStream inputstream = context.getContentResolver()。openInputStream(uri); \t \t \t \t \t data = new byte [4 * 1024]; \t \t \t int bytesRead = inputstream.read(data); \t \t \t \t \t \t一方(bytesRead = -1!){ \t \t \t bytesRead = inputstream.read(データ)。 \t \t \t} \t \t \t inputstream.close(); ' – Daimonium

+0

それはコメントで読みにくいですが、それは良いスタートのように見えます。 ;) – Silverclaw

+0

はい、動作します:3 – Daimonium

0
URL url = new URL("http://www.craftychild.com/image-files/kids-paint-center.jpg"); 
BufferedImage image = ImageIO.read(url); 
File file = new File("D:\\picture\demo.jpg"); 
ImageIO.write(image, "jpg",file); 
+0

のような 'int read(byte [] b)'メソッドを持っています。 –

+0

のURLはURIではありません。 – Daimonium

+0

URIを識別してURLを特定します。しかし、ロケータも識別子なので、すべてのURLもURIです –

関連する問題