hallo liebe leute,
schön öfter mal bin ich auf diese sache gestoßen und zwar folgendes. ich will eine datei ganz einfach byte für byte einlesen und bin einfach nicht in der lage, das problem elegant zu lösen, da ich in java nicht einfach array speicher dynamisch aloziieren kann.
ich habe es immer so gelöst:
das funktioniert zwar ohne fehler, fühlt sich aber nicht gut an. da ich zum schluss nochmal komplett über die liste iterieren muss, brauche ich ja im endeffekt doppelt so lange. außerdem ist es einfach nicht schön.
ich frage mich nun, ob jemand von euch vielleicht auch schonmal an diesem problem gesessen hat und vielleicht eine schönere lösung gefunden hat als ich, für die ich grad einfach blind bin leider. oder vielleicht hat auch einfach jemand einen denkanstoß, wie man es ohne die blöde arraylist lösen kann.
der idealfall wäre, ein array zu haben, was einfach mit der zahl der gelesenen bytes mitwächst (was unsinn ist und nicht geht, soweit ich weiss). also muss man auf jeden fall erstmal in einen buffer lesen. allerdings weiss man ja vorher nicht, wieviele bytes durch den inputstream kommen. wenn man das irgendwie von vornherein rauskriegen könnte wäre das ganze problem schon gelöst. aber die einzige idee die ich da habe, wäre selbst durchzählen, was ja dann auch wieder doppelte zeit kostet, weil man den stream dann zweimal komplett liest.
hab grad irgendwie voll das brett vorm kopf :autsch:
also würde mich über jeglichen hinweis freuen, danke
schön öfter mal bin ich auf diese sache gestoßen und zwar folgendes. ich will eine datei ganz einfach byte für byte einlesen und bin einfach nicht in der lage, das problem elegant zu lösen, da ich in java nicht einfach array speicher dynamisch aloziieren kann.
ich habe es immer so gelöst:
Java:
public static byte[] readFile(DataInputStream in) throws IOException{
ArrayList<Byte> list = new ArrayList<Byte>();
byte[] result = null;
try{
while(true){
list.add(in.readByte());
}
}catch(EOFException e){}
result = new byte[list.size()];
for(int i=0; i<list.size(); i++)
result[i] = list.get(i);
return result;
}
das funktioniert zwar ohne fehler, fühlt sich aber nicht gut an. da ich zum schluss nochmal komplett über die liste iterieren muss, brauche ich ja im endeffekt doppelt so lange. außerdem ist es einfach nicht schön.
ich frage mich nun, ob jemand von euch vielleicht auch schonmal an diesem problem gesessen hat und vielleicht eine schönere lösung gefunden hat als ich, für die ich grad einfach blind bin leider. oder vielleicht hat auch einfach jemand einen denkanstoß, wie man es ohne die blöde arraylist lösen kann.
der idealfall wäre, ein array zu haben, was einfach mit der zahl der gelesenen bytes mitwächst (was unsinn ist und nicht geht, soweit ich weiss). also muss man auf jeden fall erstmal in einen buffer lesen. allerdings weiss man ja vorher nicht, wieviele bytes durch den inputstream kommen. wenn man das irgendwie von vornherein rauskriegen könnte wäre das ganze problem schon gelöst. aber die einzige idee die ich da habe, wäre selbst durchzählen, was ja dann auch wieder doppelte zeit kostet, weil man den stream dann zweimal komplett liest.
hab grad irgendwie voll das brett vorm kopf :autsch:
also würde mich über jeglichen hinweis freuen, danke