有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在安卓中以字节的形式读取大文件

我正在尝试在应用程序中实现上传功能。对于小文件,它可以正常工作。但当我试图上传大文件时,它抛出了内存不足错误

@Override
public byte[] getBody() {
   File file = new File(filepathnew);
   //  int size = (int) file.length();
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   try{
    BufferedInputStream reader = new BufferedInputStream(new FileInputStream (filepathnew));
    int read;
    byte[] buffer = new byte[32000];
    while ((read = reader.read(buffer)) >= 0) {
       baos.write(buffer, 0, read);
    }
    } catch (FileNotFoundException fnf){
       fnf.printStackTrace();
    } catch (IOException ioe){
       ioe.printStackTrace();
    }
       byte[] everything  = baos.toByteArray();
       return everything;
}

错误日志是

E/AndroidRuntime: FATAL EXCEPTION: Thread-2667 Process: in.codme.cloudapp, PID: 15914
java.lang.OutOfMemoryError: Failed to allocate a 131008012 byte allocation with 16777216 free bytes and 50MB until OOM
at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
at in.codme.cloudapp.FileBrowserActivity$19.getBody(FileBrowserActivity.java:866)
at com.安卓.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:236)
at com.安卓.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:214)
at com.安卓.volley.toolbox.HurlStack.performRequest(HurlStack.java:106)
at com.安卓.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
at com.安卓.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)
07-15 16:47:02.869 15914-15916/in.codme.cloudapp W/art: Suspending all threads took: 49.184ms

共 (0) 个答案