ata4 / disunity

An experimental toolset for Unity asset and asset bundle files.
The Unlicense
2.7k stars 659 forks source link

Can't process larger Assets ? #42

Open kanade11 opened 10 years ago

kanade11 commented 10 years ago

I tried to extract an assets file with 1.25G,then I got that error:

[info] DisUnity v0.3.1 [info] Processing resources.assets [error] DisUnityProcessor: Can't process H:\Data\resources.assets, caused by jav a.io.IOException: Map failed at sun.nio.ch.FileChannelImpl.map(Unknown Source) at info.ata4.io.buffer.ByteBufferUtils.openReadOnly(ByteBufferUtils.java :156) at info.ata4.io.buffer.ByteBufferUtils.openReadOnly(ByteBufferUtils.java :170) at info.ata4.unity.asset.AssetFile.load(AssetFile.java:93) at info.ata4.unity.asset.AssetFile.open(AssetFile.java:58) at info.ata4.unity.cli.DisUnityProcessor.processAsset(DisUnityProcessor. java:239) at info.ata4.unity.cli.DisUnityProcessor.run(DisUnityProcessor.java:119)

    at info.ata4.unity.cli.DisUnityCli.run(DisUnityCli.java:119)
    at info.ata4.unity.cli.DisUnityCli.main(DisUnityCli.java:55)

Caused by: java.lang.OutOfMemoryError: Map failed at sun.nio.ch.FileChannelImpl.map0(Native Method) ... 9 more

But,when I extracted the smaller one such as 200Mb , it can be done successfully!

ata4 commented 10 years ago

Because Java uses signed integers for byte buffers, the upper limit should be 2 GB right now. Not sure why the memory mapping fails for your 1.25 GB file... but it looks like I need to support larger files anyway.