Byte [] and java.lang.outofmemoryerror read / write file bitwise
•
Android
I'm committed to erasing some free space in Android. Here's my code:
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
During wiping, the following crashes occur
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
Friend, how can I solve this problem
resolvent:
OutOfMemoryError
When you receive an error such as OUTOFMEMORY, it means that your application is out of memory because your application takes up more space and is allocated to it by the system
Put this attribute Android: largeheap = "true" in the < application / > start manifest.xml file
for example
<application
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">
If you just want to free up some space, you'd better let the Android system handle it, which is the best
System.gc()
Please call the garbage collector before performing any memory consuming tasks, because it will free up some space for you. If you try to call this command after the task is completed, it will be useless
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码