NullPointerException using Apache bzip2 library

I am using Apache Ant's BZip2 compression library. Documentation is available at: http://javadoc.haefelinger.it/org.apache.ant/1.7.1/org/apache/tools/bzip2/CBZip2InputStream.html

I keep getting this error when I run the code -

   Exception in thread "main" java.lang.NullPointerException
    at org.apache.tools.bzip2.CBZip2InputStream.bsR(CBZip2InputStream.java:323)
    at org.apache.tools.bzip2.CBZip2InputStream.bsGetUChar(CBZip2InputStream.java:341)
    at org.apache.tools.bzip2.CBZip2InputStream.initBlock(CBZip2InputStream.java:230)
    at org.apache.tools.bzip2.CBZip2InputStream.<init>(CBZip2InputStream.java:178)
    at org.apache.tools.bzip2.bzipCompression.main(bzipCompression.java:37)

Error in line -

**CBZip2InputStream cin = new CBZip2InputStream(fileInputStream);**

My source code is

  public static void main(String[] args) throws IOException, NullPointerException {
    // TODO Auto-generated method stub

    FileReader inFile = new FileReader("alice29.txt");
    BufferedReader buff = new BufferedReader(inFile);

    FileOutputStream fout = new FileOutputStream("alicea.txt");
    fout.write("BZ".getBytes());


    CBZip2OutputStream czout = new CBZip2OutputStream (fout);

    String message = buff.readLine(); // read first line

    while(message!=null){
        byte[] input = message.getBytes();
        czout.write(input);
        message = buff.readLine();
    }
    czout.flush();
    czout.close();


    InputStream fileInputStream = new FileInputStream("alicea.txt");
    CBZip2InputStream cin = new CBZip2InputStream(fileInputStream);
    FileOutputStream decOut = new FileOutputStream("decompressedAlice.txt");


    byte[] buf = new byte[100000];
    int len;

    while((len = cin.read(buf))>0){
        decOut.write(buf, 0, len);
    }
    decOut.close();
    cin.close();

}

Thank you so much for your help.

+3
source share
1 answer

You open FileOutputStream for alicea.txt

FileOutputStream fout = new FileOutputStream("alicea.txt");

This OutputStream never closes in your code, but in the error line you open FileInputStream in the same file:

InputStream fileInputStream = new FileInputStream("alicea.txt");
CBZip2InputStream cin = new CBZip2InputStream(fileInputStream);

IMHO, FileOutputStream , InputStream . , FileInputStream NULL .

Update: CBZip2InputStream , 2002 ( MarkMail), . java- .jar. initialize() CBZip2InputStream.java:

( 213):

private void initialize() {
    char magic3, magic4;
    magic3 = bsGetUChar();
    magic4 = bsGetUChar();
    if (magic3 != 'h' || magic4 < '1' || magic4 > '9') {
        bsFinishedWithStream();
        streamEnd = true;
        return;
    }
    setDecompressStructureSizes(magic4 - '0');
    computedCombinedCRC = 0;
}

:

private void initialize() {
    char magic1, magic2; 
    char magic3, magic4; 
    magic1 = bsGetUChar(); 
    magic2 = bsGetUChar(); 
    magic3 = bsGetUChar(); 
    magic4 = bsGetUChar(); 
    if (magic1 != 'B' || magic2 != 'Z' | magic3 != 'h' || magic4 < '1' || magic4 > '9') {   
        bsFinishedWithStream();
        streamEnd = true;
        return;
    }
    setDecompressStructureSizes(magic4 - '0');
    computedCombinedCRC = 0;
}

: svn apache ant; . , , , , . , .

+6

All Articles