Hallo liebes Java-Forum,
ich schreibe zur Zeit ein Programm für eine Facharbeit, das eine Datei einlesen soll und die Häufigkeiten der verschiedenen Bytes zählen soll. Dazu habe ich eine Klasse LongContainer geschrieben, die Methoden zum speichern eines Bytes und zählen der Häufigkeit bereitstellt und eine Methode
, welche die Zeichen oder Bytes einließt und dementsprechend entweder den richtigen LongContainer inkrementiert oder einen neuen in ein Array mit 256 Feldern hinzufügt und diesen inkrementiert.
Das funktioniert auch bis zu einem bestimmten Punkt gut, bis ich plötzlich eine NullPointerException bekomme in einem Codeabschnitt, welcher schon mindestens zwei Male durchlaufen wurde. Und das kurioseste ist, dass ich direkt davor einen Nullcheck eingebaut habe, um gerade das zu verhindern.
Ich hoffe, dass mir jemand helfen kann.
Der NullPointer tritt in Zeile 15 der Methode
auf.
Hier meine Klasse LongContainer:
und hier meine Methode
+ die Hilfsmethode
:
ich schreibe zur Zeit ein Programm für eine Facharbeit, das eine Datei einlesen soll und die Häufigkeiten der verschiedenen Bytes zählen soll. Dazu habe ich eine Klasse LongContainer geschrieben, die Methoden zum speichern eines Bytes und zählen der Häufigkeit bereitstellt und eine Methode
Code:
getAnzahlZeichen()
Das funktioniert auch bis zu einem bestimmten Punkt gut, bis ich plötzlich eine NullPointerException bekomme in einem Codeabschnitt, welcher schon mindestens zwei Male durchlaufen wurde. Und das kurioseste ist, dass ich direkt davor einen Nullcheck eingebaut habe, um gerade das zu verhindern.
Ich hoffe, dass mir jemand helfen kann.
Der NullPointer tritt in Zeile 15 der Methode
Code:
getAnzahlZeichen()
Hier meine Klasse LongContainer:
Java:
package SchrumpfHuffMan;
import SortierAlgs.Sortierable;
public class LongContainer {
private long paramLong;
private byte paramByte;
public LongContainer(){
this.paramLong = 1;
this.paramByte = 1;
}
public void inkrement(){
paramLong++;
}
public void setParamByte(byte paramByte){
this.paramByte = paramByte;
}
public byte getParamByte(){
return paramByte;
}
public long getParamLong(){
return paramLong;
}
}
und hier meine Methode
Code:
getAnzahlenZeichen()
Code:
toUnsingedInt()
Java:
private LongContainer[] getAnzahlZeichen(File quellDatei) throws IOException{
FileInputStream fIS = new FileInputStream(quellDatei);
byte[] bytes;
long gesamtEingelesen = 0;
LongContainer[] anzahlenZeichen = new LongContainer[MÖGLICHEBYTES];
if (quellDatei.length() >= MAXANZAHLEINGELESENEBYTES){
bytes = new byte[MAXANZAHLEINGELESENEBYTES];
for (int i=1;(i*MAXANZAHLEINGELESENEBYTES)<=quellDatei.length();i++){
fIS.read(bytes);
gesamtEingelesen += MAXANZAHLEINGELESENEBYTES;
for (int j=0;j<bytes.length;j++){
if (anzahlenZeichen[j] != null){
anzahlenZeichen[toUnsignedInt(bytes[j])].inkrement();
} else {
LongContainer tempLongContainer = new LongContainer();
tempLongContainer.setParamByte(bytes[j]);
tempLongContainer.inkrement();
anzahlenZeichen[toUnsignedInt(bytes[j])] = tempLongContainer;
}
}
}
}
if (gesamtEingelesen == quellDatei.length()){
fIS.close();
return beschneide(BubbleSort.sortier(anzahlenZeichen));
} else {
bytes = new byte[(int) (quellDatei.length() - gesamtEingelesen)];
fIS.skip(gesamtEingelesen);
fIS.read(bytes);
for (int i=0;i<bytes.length;i++){
if (anzahlenZeichen[i] != null){
anzahlenZeichen[bytes[i]].inkrement();
} else {
LongContainer tempLongContainer = new LongContainer();
tempLongContainer.setParamByte(bytes[i]);
tempLongContainer.inkrement();
anzahlenZeichen[bytes[i]] = tempLongContainer;
}
}
fIS.close();
return beschneide(BubbleSort.sortier(anzahlenZeichen));
}
}
private int toUnsignedInt(byte paramByte){
return paramByte & 0xff;
}