我正在调用一个客户端的下载服务,该服务发送回MIME数据,并试图保存一个zip文件。
该服务不仅返回文件本身,还返回其他几个MIME字段。所以当我使用entity.getContent()打开输入流时,我最终会将所有这些数据写入我的zip文件,而我只希望写入一部分“有效载荷”。我已经搜索过了,无论如何都看不到,只从内容中获得一个单独的部分。
代码如下:
HttpResponse response = services.getFileByPayloadID("12345-abcde");
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(response.getEntity().getContent());
} catch (UnsupportedOperationException | IOException e) {
e.printStackTrace();
}
String filePath = "c:\\sample.zip";
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(new File(filePath)));
int inByte;
while((inByte = bis.read()) != -1) {
bos.write(inByte);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {bis.close();} catch (Exception e) {}
try {bos.close();} catch (Exception e) {}
}
生成的文件的内容如下所示。请注意,我只希望将“Payload”的实际二进制内容写入该文件。任何指点或建议都将不胜感激!
----20170803116934内容处理:表单数据;name=“PayloadType”
X12_999_Response_005010X231A1----20170803116934内容处理:表单数据;name=“ProcessingMode”
批处理----20170803161934内容-处置:表单-数据;name="PayloadID"
12345-abcde----20170803161934内容处置:表单数据;name="TimeStamp"
2017-08-08T16:46:34Z----2017080311634内容处理:表单数据;name=“CORERuleVersion”
2.2.0----201708031161934内容配置:表单数据;name=“接收方”
99000061 ----20170803161934内容-处置:表单-数据;name="SenderID"
KYMEDICAID---201708031161934内容配置:表单数据;name=“ErrorCode”
成功----20170803116934内容配置:表单数据;name=“ErrorMessage”
----20170803116934内容处理:表单数据;name=“有效负载”
PKÁIKšÌ**
解决方法是读取字节,解析为字符串=
HttpResponse response = services.getFileByPayloadID("12345-abcde");
ByteArrayOutputStream buf = new ByteArrayOutputStream();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(response.getEntity().getContent());
} catch (UnsupportedOperationException | IOException e) {
e.printStackTrace();
}
String filePath = "c:\\sample.zip";
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(new File(filePath)));
String output = "";
int inByte;
String charset = "your-charset"; //using charset to ensure that you can parse string correct to compare it.
boolean start = false;
while((inByte = bis.read()) != -1) {
if (!start){
buf.write((byte) inByte);
output = buf.toString(charset);
if (output.endsWith("name=\"Payload\"")){ //compare with your pattern to determine when will start write to file
start = true;
}
}
if(start){
bos.write(inByte);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {bis.close();} catch (Exception e) {}
try {bos.close();} catch (Exception e) {}
}
我有一个输入流,我想将其写入HttpServletResponse。有一种方法,由于使用字节[],需要花费的时间太长 我想知道在速度和效率方面,什么可能是最好的方法。
我试图在我的应用程序中获取一些数据,并通过使用带有截击的HTTP POST请求向用户显示。我的问题是,我不知道如何获得服务器主体对请求的响应。在下面的代码中,响应总是“200”,这是HTTP状态代码。 如何提取身体反应并作为字符串进行管理?
问题内容: 我一直在进行一些性能分析和基准测试,以优化向临时文件的写操作,以捕获来自的任何错误。 具体来说,我们正在写入缓冲区,检查是否有错误,如果没有,则写出到。但是,问题在于临时缓冲区的请求开销有些明显: 启用剖析时约为6.2k req / s-27.6k-> 21.4k,禁用时为29k-> 24k; 每个请求的延迟增加9毫秒(40毫秒-> 49毫秒)。 当然,21k req / s仍然是很多
问题内容: 在一个文本文件中,我有150个字。我还有另一个文本文件,大约有100,000行。 如何检查属于第一个文件的每个单词是否在第二个文件中? 我曾考虑过使用,但找不到如何使用它来阅读原始文本中的每个单词。 有没有办法做到这一点?还是其他解决方案? 我尝试使用此shell脚本,但它几乎匹配每一行: 我发现的另一种方法是: 问题答案: 您可以使用: 否则匹配完整的单词: 更新: 根据评论:
问题内容: 我有一个带有汉字文本的文件,我想将这些文本复制到另一个文件中。但是文件输出混乱了中文字符。注意,在我的代码中,我已经在使用“ UTF8”作为编码了: 问题答案: 在这种情况下,请勿使用FileReader,因为它不允许您指定输入编码。在FileInputStream上构造一个InputStreamReader。 像这样: