-
Bug
-
Resolution: Fixed
-
P3
-
6
FULL PRODUCT VERSION :
[gat@MyLaptop ~]$ /home/gat/JAVA/JDK16/jdk1.6.0_b78/bin/java -version
java version "1.6.0-beta2"
Java(TM) SE Runtime Environment (build 1.6.0-beta2-b78)
Java HotSpot(TM) Client VM (build 1.6.0-beta2-b78, mixed mode, sharing)
[gat@MyLaptop ~]$
ADDITIONAL OS VERSION INFORMATION :
[gat@MyLaptop ~]$ uname -a
Linux MyLaptop.gatworks.com 2.6.11-1.1369_FC4 #1 Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux
[gat@MyLaptop ~]$
A DESCRIPTION OF THE PROBLEM :
Tried the next beta snapshot release. Program startup time took a bit longer than usual, that I taught it was spinning.
After 200 seconds the process idled. With a few ^\, i was able to see that the program was reading the compressed data file. That routine used to take some 17-19 seconds. Now it takes nearly 200 seconds.
REGRESSION. Last worked in version mustang
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached source code against a compressed binary file.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
/*
* Main.java
*
* Created on April 4, 2006, 9:33 AM
*
* To change this template, choose Tools | Options and locate the
template under
* the Source Creation and Management node. Right-click the template
and choose
* Open. You can then make changes to the template in the Source Editor.
*/
/* Copyright (c) 2006 U. George, Gatworks.com. All rights reserved. */
//package slowread;
/**
*
* @author gat
*/
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class Main {
/** Creates a new instance of Main */
public Main() {
rOpen();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
new Main();
}
DataInputStream in = null;
RandomAccessFile ra = null, rb = null;
void
rOpen() {
long startTime = Calendar.getInstance().getTimeInMillis();
try {
String filename = "GpsDataUSB17.gz";
String directory = "";
directory = ( directory.equals("") ) ? "" : directory +
File.separatorChar;
File f = new File( directory + filename );
System.out.println("GpsData_FilePortBinary.open(): Opening Binary Data file: " + f.getAbsolutePath() + ". "
+ ( f.exists() ? " (File Found)" : " (File Not Found)" ));
if (! f.exists() )
return ;
FileInputStream fr = new FileInputStream( f );
BufferedInputStream isr = null;
try {
GZIPInputStream gz = new GZIPInputStream( fr );
isr = new BufferedInputStream( gz );
} catch ( Exception e ) {
if ( e instanceof java.io.IOException
|| e instanceof java.io.EOFException ) {
isr = new BufferedInputStream( fr );
} else
e.printStackTrace();
}
in = new DataInputStream( isr );
} catch( Exception e ){ e.printStackTrace(); return; }
File f;
try {
f = File.createTempFile( "jGPSf", ".tmp");
ra = new RandomAccessFile( f, "rw" );
f.deleteOnExit();
f = File.createTempFile( "jGPSg", ".tmp");
rb = new RandomAccessFile( f, "rw" );
//f.deleteOnExit();
f.delete();
} catch( Exception e ) { e.printStackTrace(); ra = rb = null;
return; }
int pos = 0;
int gpsInputPos = 0;
byte[] gpsBuf = new byte[ 8000 ];
byte[] buf = new byte[80];
byte[] b = null;
while ( ( b = readBinaryPacket()) != null ) {
//System.out.println("Writing line "+new String(b));
try {
rb.writeInt((int) ra.getFilePointer() );
ra.write( b );
} catch ( Exception e ) { e.printStackTrace(); }
}
long endTime = Calendar.getInstance().getTimeInMillis();
long diffTime = endTime - startTime;
System.out.println("FilePort_Binary.rOpen(); time to read="
+(diffTime/1000) + "." + (diffTime%1000) + " seconds" );
try {
in.close();
} catch ( Exception e ) {}
return;
}
byte[]
readBinaryPacket() {
try {
int majic = in.readInt();
if ( majic != 0xdeadbeef ) {
System.out.println("WrongMajic. received "
+ Integer.toHexString( majic )
+ " should be "
+ Integer.toHexString(0xdeadbeef )+" at file position " );
return null;
}
long time = in.readLong();
int len = in.readInt();
byte[] buf = new byte[ len ];
in.readFully(buf);
int majic2 = in.readInt();
if ( majic2 != 0xbeefdead ) {
System.out.println("BadMajic2 ");
System.out.println("Majic2="+Integer.toHexString(
majic2 ));
Date d = new Date( time );
System.out.println("len="+len);
return null;
}
return buf;
} catch ( java.io.EOFException e ) {
if ( e.getMessage().equals( "Unexpected end of ZLIB input stream" ) ) {
System.out.println("FilePort_Binary.readBinaryPacket();"+
" Unexpected end of ZLIB input stream" + " Continueing");
}
} catch( Exception e ) { e.printStackTrace(); }
System.out.println("Returning null");
return null;
}
}
---------- END SOURCE ----------
[gat@MyLaptop ~]$ /home/gat/JAVA/JDK16/jdk1.6.0_b78/bin/java -version
java version "1.6.0-beta2"
Java(TM) SE Runtime Environment (build 1.6.0-beta2-b78)
Java HotSpot(TM) Client VM (build 1.6.0-beta2-b78, mixed mode, sharing)
[gat@MyLaptop ~]$
ADDITIONAL OS VERSION INFORMATION :
[gat@MyLaptop ~]$ uname -a
Linux MyLaptop.gatworks.com 2.6.11-1.1369_FC4 #1 Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux
[gat@MyLaptop ~]$
A DESCRIPTION OF THE PROBLEM :
Tried the next beta snapshot release. Program startup time took a bit longer than usual, that I taught it was spinning.
After 200 seconds the process idled. With a few ^\, i was able to see that the program was reading the compressed data file. That routine used to take some 17-19 seconds. Now it takes nearly 200 seconds.
REGRESSION. Last worked in version mustang
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached source code against a compressed binary file.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
/*
* Main.java
*
* Created on April 4, 2006, 9:33 AM
*
* To change this template, choose Tools | Options and locate the
template under
* the Source Creation and Management node. Right-click the template
and choose
* Open. You can then make changes to the template in the Source Editor.
*/
/* Copyright (c) 2006 U. George, Gatworks.com. All rights reserved. */
//package slowread;
/**
*
* @author gat
*/
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class Main {
/** Creates a new instance of Main */
public Main() {
rOpen();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
new Main();
}
DataInputStream in = null;
RandomAccessFile ra = null, rb = null;
void
rOpen() {
long startTime = Calendar.getInstance().getTimeInMillis();
try {
String filename = "GpsDataUSB17.gz";
String directory = "";
directory = ( directory.equals("") ) ? "" : directory +
File.separatorChar;
File f = new File( directory + filename );
System.out.println("GpsData_FilePortBinary.open(): Opening Binary Data file: " + f.getAbsolutePath() + ". "
+ ( f.exists() ? " (File Found)" : " (File Not Found)" ));
if (! f.exists() )
return ;
FileInputStream fr = new FileInputStream( f );
BufferedInputStream isr = null;
try {
GZIPInputStream gz = new GZIPInputStream( fr );
isr = new BufferedInputStream( gz );
} catch ( Exception e ) {
if ( e instanceof java.io.IOException
|| e instanceof java.io.EOFException ) {
isr = new BufferedInputStream( fr );
} else
e.printStackTrace();
}
in = new DataInputStream( isr );
} catch( Exception e ){ e.printStackTrace(); return; }
File f;
try {
f = File.createTempFile( "jGPSf", ".tmp");
ra = new RandomAccessFile( f, "rw" );
f.deleteOnExit();
f = File.createTempFile( "jGPSg", ".tmp");
rb = new RandomAccessFile( f, "rw" );
//f.deleteOnExit();
f.delete();
} catch( Exception e ) { e.printStackTrace(); ra = rb = null;
return; }
int pos = 0;
int gpsInputPos = 0;
byte[] gpsBuf = new byte[ 8000 ];
byte[] buf = new byte[80];
byte[] b = null;
while ( ( b = readBinaryPacket()) != null ) {
//System.out.println("Writing line "+new String(b));
try {
rb.writeInt((int) ra.getFilePointer() );
ra.write( b );
} catch ( Exception e ) { e.printStackTrace(); }
}
long endTime = Calendar.getInstance().getTimeInMillis();
long diffTime = endTime - startTime;
System.out.println("FilePort_Binary.rOpen(); time to read="
+(diffTime/1000) + "." + (diffTime%1000) + " seconds" );
try {
in.close();
} catch ( Exception e ) {}
return;
}
byte[]
readBinaryPacket() {
try {
int majic = in.readInt();
if ( majic != 0xdeadbeef ) {
System.out.println("WrongMajic. received "
+ Integer.toHexString( majic )
+ " should be "
+ Integer.toHexString(0xdeadbeef )+" at file position " );
return null;
}
long time = in.readLong();
int len = in.readInt();
byte[] buf = new byte[ len ];
in.readFully(buf);
int majic2 = in.readInt();
if ( majic2 != 0xbeefdead ) {
System.out.println("BadMajic2 ");
System.out.println("Majic2="+Integer.toHexString(
majic2 ));
Date d = new Date( time );
System.out.println("len="+len);
return null;
}
return buf;
} catch ( java.io.EOFException e ) {
if ( e.getMessage().equals( "Unexpected end of ZLIB input stream" ) ) {
System.out.println("FilePort_Binary.readBinaryPacket();"+
" Unexpected end of ZLIB input stream" + " Continueing");
}
} catch( Exception e ) { e.printStackTrace(); }
System.out.println("Returning null");
return null;
}
}
---------- END SOURCE ----------
- duplicates
-
JDK-6411870 REGRESSION: Loading certain png images 25x slower than 1.5
- Closed
-
JDK-6412741 BufferedInputStream.read1() contains possibly neverending loop
- Closed
- relates to
-
JDK-6192696 BufferedInputStream.read(byte[], int, int) can block if the entire buffer can't be filled
- Closed