我写信寻求解决以下困难的正确解决方案:
我需要将文件编码为Base64格式,并且没有办法使文件变小,结果,我肯定会遭受OutOfMemory
Exception的困扰,这就是为什么我使用Streaming方法来解决它。文件编码后,我立即通过代码和在线工具对其进行了解码。发现解码的内容有时但并非总是在文件末尾缺少2个字节。它确实影响了对该文件的进一步处理。
希望有人可以帮助并且可能是由于白痴的错误所致。还是谢谢。
这是代码:
FileOutputStream fout = new FileOutputStream(path + ".txt");
//this is for printing out the base64 content
FileInputStream fin = new FileInputStream(path);
System.out.println("File Size:" + path.getTotalSpace());
ByteArrayOutputStream os = new ByteArrayOutputStream();
Base64OutputStream base64out = new Base64OutputStream(os,Base64.NO_WRAP);
byte[] buffer = new byte[3 * 512];
int len = 0;
while ((len = fin.read(buffer)) >= 0) {
base64out.write(buffer, 0, len);
}
System.out.println("Encoded Size:" + os.size());
String result = new String(os.toByteArray(), "UTF-8");
fout.write(os.toByteArray());
fout.close();
base64out.close();
os.close();
fin.close();
return result;
这是在使用Base64OutputStream的情况下有效的解决方案。我将在代码后解释其中的一些:
这是代码:
FileOutputStream fout = new FileOutputStream(path + ".txt");
FileInputStream fin = new FileInputStream(path);
System.out.println("File Size:" + path.length());
ByteArrayOutputStream os = new ByteArrayOutputStream();
Base64OutputStream base64out = new Base64OutputStream(os,Base64.NO_WRAP);
byte[] buffer = new byte[3 * 512];
int len = 0;
while ((len = fin.read(buffer)) >= 0) {
base64out.write(buffer, 0, len);
}
System.out.println("Encoded Size:" + os.size());
base64out.flush();
base64out.close();//this did the tricks. Please see explanation.
String result = new String(os.toByteArray(), "UTF-8");
fout.write(os.toByteArray());
fout.flush();
fout.close();
os.close();
fin.close();
return result;
实际上,在通过添加flush()使用Dawnkeeper的建议之后,我只移动了一行代码。这些技巧是在处理任何数据之前在base64out.close()中完成的。关闭Base64OutputStream时,可能会将Base64的结尾填充写入输出。我的想法来自org.apache.myfaces.trinidad.util.Base64OutputStream
close()方法。这就是为什么我尝试。
在数据处理之前关闭OutputStream似乎很奇怪,但是在这种情况下,它仅同时关闭Base64OutputStream而不同时关闭ByteArrayOutputStream。因此,数据仍然可以从ByteArrayOutputStream中检索。
感谢Dawnkeeper的努力,并希望这个问题可以帮助其他在OutOfMemory Exception中遭受苦难的人。
我想知道是否有可能实现2种方式的流式传输使用Spring WebFlow?基本上,我希望让客户端发送服务器接收到的数据通量将它们映射到String,然后返回结果,所有这些都流利地进行,而无需收集数据。我使用RSocket完成了它,但我想知道我是否可以使用超文本传输协议2.0(使用Spring和Project-Retor)获得相同的结果。 试过这样做: 1-客户: 2.服务器: 或者: 或者: 没有
问题内容: 我有一个200MB的文件,想通过下载提供给用户。但是,由于我们希望用户仅下载一次此文件,因此我们这样做: 强制下载。但是,这意味着整个文件必须加载到内存中,这通常不起作用。我们如何以每块kb的速度将文件流式传输给他们? 问题答案: 尝试这样的事情
null null 但问题是我想以编程的方式完成这个任务。 我实际上想做的是: 步骤 但正如我所提到的,Firefox对MKV说不。 所以我尝试了hls的东西,但我不能完全得到命令来生成流,也不能在飞行中播放。 我是在命令行上开始的 所以我想再做一次 我要请求服务器播放视频文件 它生成一个子进程FFmpeg,该进程执行代码转换 向客户端发送流 客户端应该能够搜索到底,并且应该播放该内容。
我有以下设置: 几个Spring Cloud Edgware服务,其中最著名的是和依赖项 运行docker映像的Zipkin服务器 我看到服务的痕迹进入了“zipkin”主题,zipkin选择了这些痕迹,我可以在zipkin ui中查看它们 乍一看,一切似乎都很正常,尤其是对于我的服务之间的rest调用,但我只是看到它不适用于我自己的消息,我使用这些消息在我的服务之间进行异步通信(我使用sprin
问题内容: 码: 输出: 请注意,将格式正确设置为GMT,但是丢失了GMT详细信息。我知道我可以使用并解决此问题,但是造成这种现象的原因是什么? 这是一个重复的问题,没有任何答案。 编辑:让我以另一种方式提出问题,什么是检索Date对象的方式,使其始终在GMT中? 问题答案: 我需要的是: 输出:有点可疑,但我只希望日期保持一致
http://www.strathweb.com/2013/01/Asynchronaly-streaming-video-with-asp-net-web-api/ 在实现一个示例项目后,我意识到该示例基于Web API1,而不是我正在使用的Web API2.1。在做了更多的研究之后,我得到了用WebAPI2.1编译的代码。然后我意识到,如果我想做流媒体,我不能使用MP4文件,这背后有相当多的技