Hallo Forum,
Ich habe mir eine kleine InputStream-Klasse geschrieben die später einmal die durch sie laufenden Daten filtern soll. Momentan tut sie leider die Daten nichtmal korrekt weiterleiten. Was ich also möchte ist das genau das was die read()-Methode der übergebenen Klasse zurückgibt auch von dieser Klasse zurückgegeben wird. Einige JPEG-Decoder-Error zeigen aber das es da irgendwo einen Unterschied geben muss.
Danke wie immer für eure Mühe!
Ich habe mir eine kleine InputStream-Klasse geschrieben die später einmal die durch sie laufenden Daten filtern soll. Momentan tut sie leider die Daten nichtmal korrekt weiterleiten. Was ich also möchte ist das genau das was die read()-Methode der übergebenen Klasse zurückgibt auch von dieser Klasse zurückgegeben wird. Einige JPEG-Decoder-Error zeigen aber das es da irgendwo einen Unterschied geben muss.
Java:
import java.io.IOException;
import java.io.InputStream;
import com.sun.corba.se.impl.ior.ByteBuffer;
public class MJPEGDecoder extends InputStream {
InputStream in;
//Hierdrin werden die Zeilen zwischengespeichert
byte buffer[]=new byte[0];
int bufferReadPos=0;
//Erwartetes Zeichen das das Zeilende markiert
String lineEnd = "\n";
byte[] lineEndBytes = lineEnd.getBytes();
byte[] byteBuf = new byte[lineEndBytes.length];
public MJPEGDecoder(InputStream in) {
this.in=in;
if(in == null)throw new IllegalArgumentException("InputStream == null");
}
@Override
public int read() throws IOException{
while (bufferReadPos==buffer.length) {
byte[] line=readLine();
//Hier wird entschieden ob die Zeile in den Buffer kommt
//Zeiger an den Anfang setzen
bufferReadPos=0;
//Zeile in den Buffer tun
buffer=line;
}
byte b=buffer[bufferReadPos];
bufferReadPos++;
return b;
}
//Eine Zeile aus dem InputStream lesen
private byte[] readLine() throws IOException {
//Ist end true ist das Zeilende erreicht
boolean end = false;
ByteBuffer b=new ByteBuffer();
while (!end) {
in.read(byteBuf, 0, lineEndBytes.length);
end=true;
for(int i=0;i<byteBuf.length;i++){
if(lineEndBytes[i]!=byteBuf[i]){
end=false;
}
b.append(byteBuf[i]);
}
}
b.trimToSize();
return b.toArray();
}
public long skip(long n) throws IOException {
return in.skip(n);
}
public int available() throws IOException {
return in.available();
}
public void close() throws IOException {
in.close();
}
public synchronized void mark(int readlimit) {
in.mark(readlimit);
}
public synchronized void reset() throws IOException {
in.reset();
}
public boolean markSupported() {
return in.markSupported();
}
}
Danke wie immer für eure Mühe!
Zuletzt bearbeitet: