FileDownload von Servlet via AndroidBrowser

Hallo!

Ich will eine Datei von einem Servlet, welches auf meinem TomcatServer gehosted wird, herunterladen.

Problem:
Von einem normalen Computer aus gehts einwandfrei, doch bei einem Android-Handy schlägt der Download immer fehl, egal welcher Dateityp.

Das Servlet wirft folgende Exception:

ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:293)
at org.apache.catalina.connector.OutputBuffer.writeByte(OutputBuffer.java:399)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:77)
at org.yournamehere.server.DownloadServlet.processRequest(DownloadServlet.java:65)
at org.yournamehere.server.DownloadServlet.doGet(DownloadServlet.java:110)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

Servlet-Code:

//in der processRequest methode:

//setzen der http-header
String contentType = mimeTypesMap.getContentType(file);
response.setContentType(contentType);

response.addHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
response.setContentLength((int) file.length());


//datei rausschreiben
FileInputStream fin = new FileInputStream(file);
OutputStream out = response.getOutputStream();
int wtf;
while ((wtf = fin.read()) != -1) { //-1 = end of file
out.write(wtf);
}
fin.close();
out.close();

am Android-Handy habe ich den Standard-Browser sowie den Dolphin-Browser verwendet, beide verursachten den Fehler.
Ich hab ja sowas von keine Ahnung wo der Fehler versteckt ist, hoffentlich könnt ihr mir helfen.

Liebe Grüße

Ergänzung
Was vielleicht noch anzumerken ist:

-die Exception tritt bei out.write(wtf); auf
-Response-Buffer verkleinern/vergrößern hilft auch nicht

-die Exception wird jedesmal beim Byte nummer 24576 geworfen (also das 24576te welches rausgeschrieben wird). Sagt jemandem die Zahl was??
naja hoffentlich kann wer helfen.

lg