4

私は15億の長いエントリの配列を持っています。ここで、ディスクに書き込んで、もう一度読み直したいと思います。誰かが私を助けてくれますか?それを効率的に行うためのJavaライブラリ(またはカスタムプロシージャ)はありますか?

通常、私はFileChannelとMappedByteBufferを使用してそれを行います。しかし、15億の長いエントリの場合、それは単に制限を超えています。

編集:

FileChannel ch = new RandomAccessFile(path, "r").getChannel();
MappedByteBuffer mb = ch.map(FileChannel.MapMode.READ_ONLY, 0, ch.size());
mb.order(ByteOrder.nativeOrder());
4

1 に答える 1

1

I never tried with objects of this size but i think you can try to wrap your array inside a class implementig java.io.Serializable interface :

    class MyWrapper implements java.io.Serializable 
{ 
Object[] myArray; 
}

Then , when you need to store on disk your array, you will do it simply using the interface method:

FileOutputStream fouts = new 
        FileOutputStream("pathtofile");

    // Write object with ObjectOutputStream
    ObjectOutputStream outobj= new
        ObjectOutputStream (fouts);

    // Write object out to disk
    outobj.writeObject ( myWrapperInstance );

In Order to retrieve

FileInputStream infile = new 
    FileInputStream("pathtofile");

ObjectInputStream inobj = 
    new ObjectInputStream (infile);

Object obj = inobj.readObject();

MyWrapper myWrapperInstance = (MyWrapper) obj;
于 2012-07-31T12:59:35.523 に答える