title image


Smiley Byte-array maximale größe ?
Also ich schreibe grad ein Servlet das einen Datei von der Platte in ein bytearray schreibt und vom bytearray gehts dann in die datenbank.



mein problem ist ausschließlich der weg von der platte in das bytearray

mit kleinen files funzt mein dateitransfer aber wenn ich versuche eine 60mb datei hochzuladen kommt der fehler:



javax.servlet.ServletException: Servlet execution threw an exception



root cause



java.lang.OutOfMemoryError: Java heap space



wenn ich das ganze mit dem debugger laufen lasse sehe ich das er an dem punkt wo er das 60mb große bytearray erstellen soll abkackt.

und dann spuckt er (nur im debugger also eclipse) diesen fehler aus:



Source not found for ApplicationFilterChain.internalDoFilter (ServletRequest,ServletResponse) line: 257



ich habe keine ahnung mehr was ich machen soll hab auch irgendwo gelesen das man mit java -X seine heap space größe aendern kann das hat bei mir aber nicht geklappt.



freue mich auf jede antwort :)



HIER NOCH MEIN KOMPLETTER QUELLCODE DES PROBLEMATISCHEN SERVLETS:

DER KNACKPUNKT/ABSTURZPUNKT IST DIESE ZEILE: byte dataBytes[] = new byte[formDataLength];





public class DocumentServlet extends HttpServlet

{

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {

Document doc = new Document();

//ServletOutputStream out = null;

InputStream in = null;

in = request.getInputStream();



int formDataLength = request.getContentLength();

System.out.println(formDataLength);



byte dataBytes[] = new byte[formDataLength];





int bytesRead=0;

int totalBytesRead=0;



if (formDataLength > 0){

while (totalBytesRead < formDataLength){

bytesRead = in.read(dataBytes,totalBytesRead , formDataLength);

}

}



in.close();



System.out.println(totalBytesRead +=bytesRead);



//convert bytearray to String

String byteString = new String(dataBytes,"ISO-8859-1");



//release memory

dataBytes = null;



//Filter Filename from HTTP Header

int fileNameStart = byteString.lastIndexOf("filename=")+10;

int fileNameEnd = byteString.indexOf("\"",fileNameStart);

String fileName = byteString.substring(fileNameStart,fileNameEnd);



System.out.println(fileName);



//gets a String of the filecontent

int fileContentStart = byteString.indexOf("Content-Type",fileNameEnd);

fileContentStart = byteString.indexOf("\n",fileContentStart);

int fileContentEnd = byteString.lastIndexOf("-----------------------------",byteString.length());

byteString=byteString.substring(fileContentStart+3,fileContentEnd-2);



//System.out.println(byteString);





//convert from String to bytearray

doc.setPeng(byteString.getBytes("ISO-8859-1"));



//release Memory

byteString="";



//print size of bytearray(filecontent)

System.out.println(doc.getPeng().length);

doc.save();

}

}

}



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: