java - 使用 uri 将文件读取到字节数组

标签 java android

我需要使用 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();
}

但我不明白如何修改它以读取字节。

最佳答案

正如 pskink 所说,您的主要问题是您将 InputStream 包装在 Reader 中。 Reader 的目的是将字节解码为字符,根据定义,这是您想要避免的。您需要分配一个缓冲区并使用InputStream的read方法来填充它。

请记住,您必须知道传入字节数或在处理已接收到的数据时多次读取。

或者,您可以使用 read 方法获取一个 int,检查流是否已结束,然后将该 int 转换为一个字节并一一处理。但通常,您希望使用缓冲区,因为这样更快。

关于java - 使用 uri 将文件读取到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41801605/

相关文章:

java - 自定义类的 Arraylist<CustomClass>() 的 retainAll() 不起作用

android - 与 Xcode 中一样,Android 中按下按钮的背景变化

android - 如何将数据从 BroadcastReceiver 发送到 android 中的 Activity?

java - Eclipse 格式化程序设置

java - Jackson JSON、不可变类和接口(interface)

java - 如何在java集合hashmap或hashset或arraylist中存储webtable?

android - 首次设置导航组件

android - AuthUI : A sign-in error occurred. com.firebase.ui.auth.FirebaseUiException : Code: 12500, 消息:12500

java - 如何使用底部导航 Activity 更改 fragment ?

java - ScrollView 中的两个 ListView ,出于某种原因忽略了 wrap_content