我必须向服务器发送一些从相机拍摄的 JPEG 文件。当然,仅通过文件流就可以做到这一点。我的代码(对于每个文件)如下所示:
struct3.put("type", "image/jpeg");
f = new File(fileName);
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[(int)f.length()];
bis.read(buffer);
fis.close();
struct3.put("bits", buffer);
毕竟我发送了一个结构:
Object[] params3 = { bid, login, pass, struct3 };
Object response2 = client.send("my_function", params3);
当我发送小文件时,一切都是正确的,但是当文件更大时,我收到“内存不足异常”。
我的解决方案是压缩 JPEG 文件:
struct3.put("type", "image/jpeg");
final Options opts = new Options();
opts.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(fileName, opts);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
byte[] byteArray = stream.toByteArray();
struct3.put("bits", byteArray);
Object[] params3 = { bid, login, pass, struct3 };
Object response2 = client.send("my_function", params3);
但是这种方式在服务器端产生了一个错误:“JPEG 文件过早结束”。
有什么方法可以在发送之前更正 JPEG 文件吗?我知道JPEG应该以EOI(0xff,0xfd)结尾。
如何检查并进行更正?