如何从大型序列化文件中有效地反序列化给定范围的对象

时间:2016-12-03 17:18:00

标签: java deserialization

我有一个包含更多200K对象的大型序列化对象文件,对于给定范围fromIndextoIndex,我想一次反序列化500个对象。

下面的代码工作正常,但是,迭代chuck需要很长时间,并且只存储属于给定范围的代码:if( i >= fromIndex && i < toIndex )

public void deserializeFile( int fromIndex, int toIndex ) throws FileNotFoundException, IOException 
{
    m_objects_list = new ArrayList<MyObject>();
    ObjectInputStream inputStream = null;
    try 
    {
        BufferedInputStream bufferedStream = new BufferedInputStream( new FileInputStream("myObjects.ser") );
        inputStream = new ObjectInputStream( bufferedStream );

        int i=0;
        int count=0;
        MyObject obj = new MyObject();
        while (true) 
        {               
            Object object = inputStream.readObject();                   

            if( i >= fromIndex && i<toIndex )
            {
                obj = (MyObject) object;                    
                m_objects_list.add(obj);
                count++;
            }
            i++;
            if( count == toIndex - fromIndex )
            {
                inputStream.close();
                return;
            }
        }
    }
    catch (EOFException EOF) 
    {
        inputStream.close();
        return;
    }
    catch (ClassNotFoundException c) 
    {
        System.out.println("Class not found");
        c.printStackTrace();
        return;
    }       
}

我想知道是否有更好的方法直接读取给定索引处的对象并从那里迭代,而不是总是从第一个对象开始读取?

0 个答案:

没有答案