Android - 将字节数组写入 OutputStreamWriter

标签 android string stream byte

我有一个通过网络服务上传照片的应用程序。过去,我将文件加载到流中,然后转换为 Base64。然后我通过 OutputStreamWriter 的 write() 方法发布了结果字符串。现在,Web 服务发生了变化,它需要 multipart/form-data 而不是 Base64。

所以我需要以某种方式发布此文件的字符而不进行转换。我确定我很接近,但我得到的只是内容长度下溢或溢出。奇怪的是,在调试器中我可以看到我的缓冲区长度与我发布的字符串的长度相同。这是我正在做的事情,希望有足够的代码:

// 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!

最佳答案

改变

OutputStreamWriter dataStream = new OutputStreamWriter(conn.getOutputStream());

有了这个

DataOutputStream dataStream = new DataOutputStream(conn.getOutputStream()); 

并直接调用dataStream.write(buffer);

让我知道它的行为

编辑:根据评论编辑答案

关于Android - 将字节数组写入 OutputStreamWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543227/

相关文章:

android - 如何在 Android 中强制使用外部麦克风和电话扬声器?

java - Proguard 使我的 RemoteController compat 实现在 API<19 设备上崩溃

java - 如何使用reflectionEquals检查2个对象中的所有字段是否相等?

c++ - 可以使用带有 memcpy 的 istream

firebase - flutter 的Firebase流中的where子句

java - 在 android 中读取 XML 响应

android - 如何将 Textview 彼此相邻添加,如果它们不合适则将它们移动到下一行

r - 使用循环或应用覆盖多个字符串变量

c - C 中的字符串文字以 %?

json - 转换文件完整内容nodejs