Java – Byte[] and java.lang.OutOfMemoryError read/write files bitwisely

Byte[] and java.lang.OutOfMemoryError read/write files bitwisely… here is a solution to the problem.

Byte[] and java.lang.OutOfMemoryError read/write files bitwisely

I’m working on clearing some free space in android. Here is 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 the deletion process, I encountered the following crash.

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 do I fix this.

Solution

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)

When you get an error like OutOfMemory, it means that your application is running out of memory because your application consumes more space and is then 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, it’s best to let the Android system that knows best handle it

System.gc()

Call the garbage collector before performing any memory consumption tasks, as this will free up some space for you. If you try to invoke it after completing the task, then it is of no use

Related Problems and Solutions