Ich habe eine Anwendung, die Fotos über einen Web-Service hochlädt. In der Vergangenheit habe ich eine Datei in einen Stream geladen und in Base64 konvertiert. Dann habe ich die resultierende Zeichenfolge über die write() -Methode eines OutputStreamWriter gepostet. Jetzt hat sich der Webservice geändert und erwartet mehrteilige/Formulardaten und es erwartet Base64 nicht.Android - Schreibe Byte-Array zu OutputStreamWriter
Also irgendwie muss ich die chararters dieser Datei wie ohne Konvertierung buchen. Ich bin mir sicher, dass ich in der Nähe bin, aber alles, was ich je bekomme, ist ein Unterlauf oder Überlauf der Inhaltslänge. Das Seltsame ist, dass ich im Debugger sehen kann, dass meine Pufferlänge die gleiche Länge hat wie der String, den ich poste. Hier ist, was ich tue und hoffentlich genug Code:
// conn is my connection
OutputStreamWriter dataStream = new OutputStreamWriter(conn.getOutputStream());
// c is my file
int bytesRead = 0;
long bytesAvailable = c.length();
while (bytesAvailable > 0) {
byte[] buffer = new byte[Math.min(12288, (int)bytesAvailable)];
bytesRead = fileInputStream.read(buffer, 0, Math.min(12288, (int)bytesAvailable));
// assign the string if needed.
if (bytesRead > 0) {
bytesAvailable = fileInputStream.available();
// I've tried many encoding types here.
String sTmp = new String(buffer, "ISO-8859-1");
// HERE'S the issue. I can't just write the buffer,
dataStream.write(sTmp);
dataStream.flush();
// Yes there's more code, but this should be enough to show why I don't know what I'm doing!
Gibt es einen Grund, warum Sie die Bytes in Zeichenfolgen konvertieren, anstatt sie in den Ausgabestrom roh zu schreiben? – Michael
Da die write() - Methode von OutputStreamWriter char [] oder string akzeptiert. Nicht Byte []. – Paul
Verwenden Sie stattdessen einen 'DataOutputStream'. –