Bufferunderflowexception Java

Schreibe ich Werte in eine Datei.

Die Werte geschrieben werden, zu korrigieren. In einer anderen Anwendung kann ich die Datei Lesen, ohne Ausnahmen.

Aber in meiner neuen Anwendung, bekomme ich eine Bufferunderflowexception wenn Sie versuchen, die Datei zu Lesen.

Habe ich Tage verbringen, um dieses Problem zu lösen, aber ich weiß einfach nicht, wie es zu lösen.

Habe EINE MENGE Forschung zu.

Den bufferunderflowexception bezieht sich auf :

Double X1 = mappedByteBufferOut.getDouble(); //8 byte (double)

Dies ist mein code zum Lesen der Datei:

 @Override
    public void paintComponent(Graphics g) {

    RandomAccessFile randomAccessFile = null;
    MappedByteBuffer mappedByteBufferOut = null;
    FileChannel fileChannel = null;

    try {
        super.paintComponent(g);

        File file = new File("/home/user/Desktop/File");

        randomAccessFile = new RandomAccessFile(file, "r");

        fileChannel = randomAccessFile.getChannel();

        mappedByteBufferOut = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, randomAccessFile.length());

        while (mappedByteBufferOut.hasRemaining()) {

            Double X1 = mappedByteBufferOut.getDouble(); //8 byte (double)
            Double Y1 = mappedByteBufferOut.getDouble();
            Double X2 = mappedByteBufferOut.getDouble();
            Double Y2 = mappedByteBufferOut.getDouble();
            int colorRGB = mappedByteBufferOut.getInt(); //4 byte (int)
            Color c = new Color(colorRGB);

            Edge edge = new Edge(X1, Y1, X2, Y2, c);

            listEdges.add(edge);

        }
        repaint();

        for (Edge ed : listEdges) {
            g.setColor(ed.color);
            ed = KochFrame.edgeAfterZoomAndDrag(ed);
            g.drawLine((int) ed.X1, (int) ed.Y1, (int) ed.X2, (int) ed.Y2);
        }
    }
    catch (IOException ex)
    {
        System.out.println(ex.getMessage());
    }
    finally
    {
        try
        {
            mappedByteBufferOut.force();
            fileChannel.close();
            randomAccessFile.close();
            listEdges.clear();
        } catch (IOException ex)
        {
            System.out.println(ex.getMessage());
        }
    }
}

Ich hoffe mir kann jemand helfen.

wenn (randomAccessFile.length()>8){ while (mappedByteBufferOut.hasRemaining()) { } }

InformationsquelleAutor Swag | 2013-12-17

Schreibe einen Kommentar