使用TarOutputStream出现 request to write '1024' bytes exceeds size in header错误的解决方法

因为测试流程中,所测客户端会根据服务器A返回的response决定发送给服务器B的请求里各参数的值,所以现在需要模拟服务器的响应。而这个项目服务器A的响应式返回一个流,一个GZIP压缩格式流,压缩的是多个文件,所以需要编写相应的groovy脚本。我这里使用了apache的ant包。不过在运行的时候出错了。错误提示如下

Caught: java.io.IOException: request to write ‘1024‘ bytes exceeds size in header of ‘29886‘ bytes for entry ‘rate.csv‘
java.io.IOException: request to write ‘1024‘ bytes exceeds size in header of ‘29886‘ bytes for entry ‘rate.csv‘
at org.apache.tools.tar.TarOutputStream.write(TarOutputStream.java:279)
at org.apache.tools.tar.TarOutputStream.write(TarOutputStream.java:260)
at org.apache.tools.tar.TarOutputStream$write.call(Unknown Source)
at temp.packFile(temp.groovy:26)
at temp.process(temp.groovy:51)
at temp.run(temp.groovy:55)。

按照字面意思,然后仔细看了下api文档read(byte[] b), read(byte[] b,int off, int len), write(byte[] wBuf), write(byte[] wBuf, int wOffset, int numToWrite)的相关解释后, 经过尝试,终于解决了。看来我以前读取文件和写入文件使用一个参数的方法的习惯不好,虽然之前都没有出问题,但是这次就出现了,以后还是使用read(byte[] b,int off, int len)和write(byte[] wBuf, int wOffset, int numToWrite),这样就能避免这个错误的再次发生了。

附上代码

import java.util.zip.GZIPOutputStream
import org.apache.tools.tar.TarEntry
import org.apache.tools.tar.TarOutputStream

public void packFile(String... filePath){
int num=filePath.length;
String targetPath=filePath[num-1]
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(targetPath));
TarOutputStream tos=new TarOutputStream(bos);
tos.setLongFileMode(TarOutputStream.LONGFILE_GNU);
for(int i=0;i<num-1;i++){
File sourceFile=new File(filePath[i]);
TarEntry te=new TarEntry(sourceFile.getName());
te.setSize(sourceFile.length());
println(sourceFile.length())
tos.putNextEntry(te);
byte[] buffer=new byte[1024];
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(sourceFile));
int count=0
while((count=bis.read(buffer,0,1024))>-1){
tos.write(buffer,0,count);

tos.closeEntry();
tos.flush();
bis.close();
}
tos.close();
}

public void compressFile(String filePath){
FileInputStream fis=new FileInputStream(filePath);
GZIPOutputStream gos=new GZIPOutputStream(new FileOutputStream(filePath+".gz"));
byte[] buffer=new byte[1024];
while(fis.read(buffer)>-1){
gos.write(buffer);
}
fis.close();
gos.finish();
gos.close();
}

public void process() {
String sourcePath1="D:/rate.csv";
String sourcePath2="D:/plan.csv";
String tarPath="D:/test/test.tar";
packFile(sourcePath1,sourcePath2,tarPath);
compressFile(tarPath);
}

process();

使用TarOutputStream出现 request to write '1024' bytes exceeds size in header错误的解决方法

时间: 2024-10-11 19:07:10

使用TarOutputStream出现 request to write '1024' bytes exceeds size in header错误的解决方法的相关文章

因用了NeatUpload大文件上传控件而导致Nonfile portion &gt; 4194304 bytes错误的解决方法

今天遇到一个问题,就是"NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误",百度后发现了一个解决方法,跟大家分享下: NeatUpload是一个开源的大文件上传控件,非常的强大,支持文件类型过滤.上传进度条显示.多文件上传等强大的功能. 但部署至项目后,有些地方用普通的FileUpload上传时却发生了一个错误(Nonfile portion > 4194304 bytes,文件大于默认值4M),因如果用NeatUp

Request method &#39;POST&#39; not supported错误和解决方法

在使用SpringBoot的时候,在html页面用form表单post提交数据的时候报错: Request method 'POST' not supported 错误解析: 我是用的前端页面是HTML页面,而HTML文件,它并不支持响应头带有 post 的应答包,所以会报错. 而且在测试的时候进入到了Controller方法内,只是在进行页面跳转的时候,报错. 所以无法完成跳转操作. 解决方法: 若条件允许,使用 jsp 等能够接收 post 应答包的页面文件.使用jsp页面就可以完美解决问题

Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法

通常项目上线前都有一些初始化数据需要导入,在今天博客系统发布前我使用sqlyog工具远程登录服务器的Mysql数据库,执行sql脚本对初始数据进行导入的时候报错: Got a packet bigger than'max_allowed_packet'bytes 查阅资料发现是由于max_allowed_packet的值设置过小,知道原因就好办了,只需要将max_allowed_packet值设置大一点就OK了. 通过终端进入mysql控制台,输入如下命令可以查看max_allowed_pack

Python 在用 Pyinstaller封装exe-TypeError: expected str, bytes or os.PathLike object, not NoneType 解决方法!

一.环境: 系统:win7 版本:Python 3.7.2  (32位) 二.问题: 利用Pyinstaller封装exe 时, 报错:TypeError: expected str, bytes or os.PathLike object, not NoneType 如下图: 三.解决方法: 1.这个问题,在GitHub上已提及 https://github.com/pyinstaller/pyinstaller/issues/3942 ; 被标记为 #3942 Error 2[真正解决方法:

小程序发送request请求,提示不在合法域名列表中的解决方法

参考网址:https://blog.csdn.net/debruyne/article/details/78046831 方法一:在小程序中设置不校验合法域名 方法二: 管理员将要使用的域名添加到小程序后台 设置 --> 服务器域名配置 原文地址:https://www.cnblogs.com/slovey/p/9288613.html

mysqld-nt: Out of memory (Needed 1677720 bytes)解决方法

http://www.jb51.net/article/58726.htm 今天发现网站有点慢,发现mysql日志中提示mysqld-nt: Out of memory (Needed 1677720 bytes),经排查是由于最近调整了mysql的一些参数导致,以为内存大就不怕了,32位系统真心内容利用率很低,据说不超过4G,我们的32G内存真浪费了,以后还是使用win2008 r2或centos系统做服务器吧.废话不多说下面为大家分享下解决方法: 因为mysql版本不同可能配置略有区别,主要

request.getRemoteAddr()取得的是IPv6的地址格式解决方法

1:在使用request.getRemoteAddr()取得客户端的IP地址时,得到的却是IPv6的地址格式0:0:0:0:0:0:0:1,而不是IPv4的地址格式127.0.0.1的原因? 因为机器上启用的IPv6协议,所以在对localhost进DNS解析时,得到的是IPv6形式的本机地址0:0:0:0:0:0:0:1. 实际上这种情况只有在服务器和客户端在同一台机器上用localhost访问时才会出现. 2:解决方法 (1)使用127.0.0.1代替localhost进行访问 把地址格式写

NSLocalizedDescription=Request failed: unacceptable content-type: text/html 解决方法

使用AFNetworking请求一个网站出现了以下错误 Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7fc688f3

Bad Request (Invalid Hostname)解决方法

当在Windows Server 2003+IIS6做Web服务器,出现打开如http://paullevi.oicp.net,出现,Bad Request (Invalid Hostname) 的提示时,更改IIS6的Internet 信息服务管理器的默认网站里的属性->网站->IP地址栏,设置为(全部未分配) ,这样问题就可以解决了 Bad Request (Invalid Hostname)解决方法,布布扣,bubuko.com