[解決済み] バッファアンダーフロー例外 Java
2022-02-11 08:59:12
質問
ファイルに値を書き込んでいます。
値は正しく書き込まれています。別のアプリケーションでは、例外なくそのファイルを読むことができます。
しかし、私の新しいアプリケーションでは
Bufferunderflowexception
を読み込もうとすると
は、その
bufferunderflowexception
は、以下を参照しています。
Double X1 = mappedByteBufferOut.getDouble(); //8 byte (double)
これは、ファイルを読み込むための私のコードです。
@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());
}
}
}
解決方法は?
からの ドキュメント java.nio.ByteBufferを使用しています。
スローします。 BufferUnderflowException - このバッファの残りが8バイト未満であった場合
これで、このExceptionがどこから来ているのか、かなり明確になったのではないでしょうか。この問題を解決するには、ByteBufferにダブル(8バイト)を読み込むのに十分なデータ量があるかどうかを確認する必要があります。
remaining()
ではなく
hasRemaining()
というように、1バイトしかチェックしない。
while (mappedByteBufferOut.remaining() >= 36) {//36 = 4 * 8(double) + 1 * 4(int)
関連
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] テスト
-
[解決済み】javaで無効な文字定数
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。