Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6409506

On b78 it takes 10 times longer to read a compressed binary file

XMLWordPrintable

    • b77
    • 6
    • b83
    • x86, sparc
    • linux, linux_redhat_4.0, solaris_10, windows_2003, windows_xp

      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 ----------

            chegar Chris Hegarty
            ndcosta Nelson Dcosta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: