java大文件按位_Byte []和java.lang.OutOfMemoryError读/写文件按位

我致力于在android中擦除一些可用空间.这是我的代码:

private void creatingFileDelete(int size, int passMode)

{

File lastFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"/.tmpToDelete/last.txt");

if (lastFile.exists() == false)

{

try

{

lastFile.createNewFile();

}//End of try block

catch (IOException e)

{

e.printStackTrace();

}//End of catch block

}//End of if condition

try

{

RandomAccessFile rwFile = new RandomAccessFile(lastFile, "rw");

rwFile.setLength(1024*1024*size);

FileChannel rwChannel = rwFile.getChannel();

int numBytes = (int) rwChannel.size();

MappedByteBuffer buffer = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, numBytes);

buffer.clear();

byte[] randomBytes = new byte[numBytes];

new Random().nextBytes(randomBytes);

Arrays.fill(randomBytes, 0, randomBytes.length, (byte) passMode);

buffer.put(randomBytes);

buffer.force();

rwFile.close();

}//End of try block

catch (Exception e)

{

Log.e("Clean free space---","message :" +e.getMessage());

}//End of catch block

}//End of creatingFileDelete

在擦拭过程中,出现以下崩溃.

java.lang.RuntimeException: An error occured while executing doInBackground()

at android.os.AsyncTask$3.done(AsyncTask.java:299)

at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)

at java.util.concurrent.FutureTask.setException(FutureTask.java:219)

at java.util.concurrent.FutureTask.run(FutureTask.java:239)

at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)

at java.lang.Thread.run(Thread.java:856)

Caused by: java.lang.OutOfMemoryError

at xxx.creatingFileDelete(CleanFreespace.java:2634)

at xxx.CleanFreespace.access$71(CleanFreespace.java:2610)

at xxx.CleanFreespace$15.doInBackground(CleanFreespace.java:2100)

at xxx.CleanFreespace$15.doInBackground(CleanFreespace.java:1)

at android.os.AsyncTask$2.call(AsyncTask.java:287)

at java.util.concurrent.FutureTask.run(FutureTask.java:234)

... 4 more

朋友,我该如何解决这个问题.

解决方法:

OutOfMemoryError

Thrown when a request for memory is made that can not be satisfied using the available platform resources. Such a request may be made by both the running application or by an internal function of the VM(Virtual Machine)

当您收到诸如OutOfMemory之类的错误时,这意味着您的应用程序内存不足,因为您的应用程序占用了更多的空间,然后由系统分配给它.

将此属性android:largeHeap =“ true”放在< application />开始manifest.xml文件

例如

android:name="support.classes.StartUp"

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:largeHeap="true" // you are increasing the heap space for the app

android:theme="@style/AppThemeTest">

如果您只是想释放一些空间,最好让Android系统处理它,这是最好的

System.gc()

在执行任何消耗内存的任务之前,请先调用垃圾收集器,因为这将为您释放一些空间.如果您在任务完成后尝试调用此命令,那么它将毫无用处

标签:file,java,android

来源: https://codeday.me/bug/20191119/2035023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值