Tengo una aplicación que carga fotos a través de un servicio web. En el pasado, cargué un archivo en una secuencia y lo convertí a Base64. Luego publiqué la cadena resultante mediante el método write() de un OutputStreamWriter. Ahora, el servicio web ha cambiado, y espera multipart/form-data y no espera Base64.Android - Escribir matriz de bytes en OutputStreamWriter
De alguna manera tengo que publicar los chararters de este archivo sin conversión. Estoy seguro de que estoy cerca, pero todo lo que obtengo es un contenido insuficiente o desbordado. Lo curioso es que en el depurador puedo ver que la longitud de mi buffer es de la misma longitud que la cadena que estoy publicando. Esto es lo que estoy haciendo y suficiente código de esperar:
// 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!
¿Hay alguna razón por la que convierta los bytes en cadenas en lugar de escribirlas sin formato en la secuencia de salida? – Michael
Porque el método write() de OutputStreamWriter acepta char [] o cadena. No byte []. – Paul
Intenta usar un 'DataOutputStream' en su lugar. –