Meine aktuelle Anwendung erfordert, Daten zu lesen und es dem Benutzer zu ermöglichen, es als Datei herunterzuladen. Server-Side-Code zu diesem ähnlich ist: https://stackoverflow.com/a/55788/3192744 Ich muss die Daten innerhalb INPUTSTREAM- meine aktuelle Methode Input zu erhalten ist:Wie werden Daten in Java InputStream abgelegt?
InputStream getIStream(){
StringBuilder sb = new StringBuilder();
String temp = “”;
while(//there is data to be read from database//){
temp = //partial data or one entry from database
//some other modification in temp
sb.append(temp).append(“\n”);
}
exampleString = sb.toString();
InputStream stream = new ByteArrayInputStream(exampleString.getBytes());
}
Diese Methode funktioniert für jetzt, da meine Daten sehr klein ist, etwa 1000 String, die jeweils etwa 100 Zeichen, also 100000 Zeichen. Bevor ich mit dem Download beginne, muss ich warten, bis ganze Daten in einer Zeichenfolge geschrieben sind. Auch wenn meine Datengröße zunimmt, passt sie nicht in eine Zeichenfolge. So ist es möglich, InputStream innerhalb der while-Schleife zu aktualisieren.
Und um diese Daten auf der Serverseite zu lesen, warte ich die Methode, InputStream zurückzugeben, so ist es möglich, InputStream als Methode Argument zu senden, und lesen Sie es während es aktualisiert wird.
Grundsätzlich möchte ich etwas wie eine Rohrleitung implementieren, wo modifizierte Strings von der Datenbank-Ausgabe gesendet werden, und auf der Empfängerseite werden Daten in die Datei für den Benutzer zum Download gestellt, und der Download-Prozess für Benutzer kann beginnen, während Daten wird aus der Datenbank gelesen.
Ich weiß nicht, ob es Ihr Problem lösen würde, aber da Sie scheinen nur Textdaten zu schreiben werden Sie nutzen könnten Stattdessen wird der 'PrinterWriter' des Servlets aufgerufen, der die 'println (String str)' - Methode für jede abgerufene Teildatei aufruft. In diesem Fall rufen Sie den 'PrinterWriter' über' ServletResponse.getWriter() 'ab, anstatt' ServletResponse.getOutputStream() 'zu verwenden und müssen weder' StringBuilder' noch 'InputStream' verwenden. – Aaron
Wie @Aaron sagte, Ihr Problem ist nicht ein 'InputStream'. Sie sollten einen 'OutputStream' (oder einen' Writer') bekommen, wo Sie die Daten ausgeben können, während Sie sie aus der Datenbank lesen. – Kayaman