社区
Web 开发
帖子详情
怎么将一个ZipInputStream的ZipEntry转换成byte[]
flylyke
2004-10-13 03:27:44
我像在解压的时候,程序就能够取出压缩里的文件,然后进行其他处理,而不是在写如硬盘后在去读取后做相关处理。
...全文
1999
3
打赏
收藏
怎么将一个ZipInputStream的ZipEntry转换成byte[]
我像在解压的时候,程序就能够取出压缩里的文件,然后进行其他处理,而不是在写如硬盘后在去读取后做相关处理。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
红楼梦魇
2004-12-17
打赏
举报
回复
给你个从zip包中读取图片文件然后显示的例子吧
package catalog.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.*;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.InflaterInputStream;
import java.net.URLDecoder;
/**
* @author red
* @version 1.0 2004-12-17
*/
public class ShowImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
public void doProcess(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String name = req.getParameter("name");
name = URLDecoder.decode(name, "UTF-8");
String zipFile = "c:/1.zip";
File file = new File(zipFile);
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry entry = null;
do {
entry = zis.getNextEntry();
if (entry == null)
continue;
if (!entry.getName().equals(name)) {
continue;
}
byte[] buf = getData(zis);
OutputStream toClient = res.getOutputStream(); //得到向客户端输出二进制数据的对象
toClient.write(buf); //输出数据
toClient.close();
break;
} while (entry != null);
zis.close();
fis.close();
}
private byte[] getData(InflaterInputStream zis) {
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] temp = new byte[1024];
byte[] buf = null;
int length = 0;
while ((length = zis.read(temp, 0, 1024)) != -1) {
bout.write(temp, 0, length);
}
buf = bout.toByteArray();
bout.close();
return buf;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
etre
2004-10-13
打赏
举报
回复
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解
压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java
类实现zip数据压缩方式的编程方法。
zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的
数据项存储压缩数据。
与zip文件有关的几个Java类
·类ZipEntry
public ZipEntry(String name);
name为指定的数据项名。
·类ZipOutputStream
ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。下面是它的
几个函数:
public ZipOutputStream(OutputStream out);
∥利用输出流out构造一个ZIP输出流。
public void setMethod(int method);
∥设置entry压缩方法,缺省值为DEFLATED。
public void putNextEntry(ZipEntry newe);
∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe
并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。
·类ZipInputStream
ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。下面是它的
几个函数:
public ZipInputStream(InputStream in);
∥利用输入流in构造一个ZIP输出流。
public ZipEntry getNextEntry();
∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。
public void closeEntry();
∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。
程序代码及其注释
下列的程序实现了数据文件zip方式的压缩和解压缩方法。randomData()函数随机生成
50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP压缩文件;saveFile()函数
将随机生成的数据存到ZIP格式的压缩文件中。
import java.util.zip.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.Math;
import java.io.*;
public class TestZip extends Frame implements ActionListener {
TextArea textarea; ∥显示数据文件的多行文本显示域
TextField infotip; ∥显示数据文件未压缩大小及压缩大小单行文本显示域
String doc; ∥存储随机生成的数据
long doczipsize = 0;∥压缩数据文件的大小
public TestZip(){
∥生成菜单
MenuBar menubar = new MenuBar();
setMenuBar(menubar);
Menu file = new Menu("File",true);
menubar.add(file);
MenuItem neww= new MenuItem("New");
neww.addActionListener(this);
file.add(neww);
MenuItem open=new MenuItem("Open");
open.addActionListener(this);
file.add(open);
MenuItem save=new MenuItem("Save");
save.addActionListener(this);
file.add(save);
MenuItem exit=new MenuItem("Exit");
exit.addActionListener(this);
file.add(exit);
∥随机生成的数据文件的多行文本显示域
add("Center",textarea = new TextArea());
∥提示文本原始大小、压缩大小的单行文本显示域
add("South",infotip = new TextField());
}
public static void main(String args[]){
TestZip ok=new TestZip();
ok.setTitle("zip sample");
ok.setSize(600,300);
ok.show();
}
private void randomData(){
∥随机生成50个double数据,并放在doc字符串变量中。
doc="";
for(int i=1;i<51;i++){
double rdm=Math.random()*10;
doc=doc+new Double(rdm).toString();
if(i%5 == 0) doc=doc+"n";
else doc=doc+" ";
}
doczipsize = 0;
showTextandInfo();
}
private void openFile(){
∥打开zip文件,将文件内容读入doc字符串变量中。
FileDialog dlg=new FileDialog(this,"Open",FileDialog.LOA D);
dlg.show();
String filename=dlg.getDirectory()+dlg.getFile();
try{
∥创建一个文件实例
File f=new File(filename);
if(!f.exists()) return; ∥文件不存在,则返回
∥用文件输入流构建ZIP压缩输入流
ZipInputStream zipis=new ZipInputStream(new FileInputStream(f));
zipis.getNextEntry();
∥将输入流定位在当前entry数据项位置
DataInputStream dis=new DataInputStream(zipis);
∥用ZIP输入流构建DataInputStream
doc=dis.readUTF();∥读取文件内容
dis.close();∥关闭文件
doczipsize = f.length();∥获取ZIP文件长度
showTextandInfo();∥显示数据
}
catch(IOException ioe){
System.out.println(ioe);
}
}
private void saveFile(){
∥打开zip文件,将doc字符串变量写入zip文件中。
FileDialog dlg=new FileDialog(this,"Save",FileDialog.SAVE);
dlg.show();
String filename=dlg.getDirectory()+dlg.getFile();
try{
∥创建一个文件实例
File f=new File(filename);
if(!f.exists()) return; ∥文件不存在,则返回
∥用文件输出流构建ZIP压缩输出流
ZipOutputStream zipos=new ZipOutputStream(new FileOutputStream(f));
zipos.setMethod(ZipOutputStream.DEFLATED); ∥设置压缩方法
zipos.putNextEntry(new ZipEntry("zip"));
∥生成一个ZIP entry,写入文件输出流中,并将输出流定位于entry起始处。
DataOutputStream os=new DataOutputStream(zipos);
∥用ZIP输出流构建DataOutputStream;
os.writeUTF(doc);∥将随机生成的数据写入文件中
os.close();∥关闭数据流
doczipsize = f.length();
∥获取压缩文件的长度
showTextandInfo();∥显示数据
}
catch(IOException ioe){
System.out.println(ioe);
}
}
private void showTextandInfo(){
∥显示数据文件和压缩信息
textarea.replaceRange(doc,0,textarea.getText().length());
infotip.setText("uncompressed size: "+doc.length()+"compressed size: "+dc zipsize);
}
public void actionPerformed(ActionEvent e){
String arg = e.getActionCommand();
if ("New".equals(arg)) randomData();
else if ("Open".equals(arg)) openFile();
else if ("Save".equals(arg)) saveFile();
else if ("Exit".equals(arg)){
dispose();∥关闭窗口
System.exit(0);∥关闭程序
}
else {
System.out.println("no this command!");
}
}
}
LiGun
2004-10-13
打赏
举报
回复
帮你顶,我也向知道
zip
的
Zip
Entry
转换为
InputStream
在有些时候我们需要将
zip
包下的某个
entry
转换为
inputstream
流方便处理。 贴下代码, /** * 解压
zip
获取
zip
下的某个文件流 * @param in
zip
对应的输入流 * @param fileName
zip
下某个文件名 * @return
zip
下文件对应输入流 * @throws IOException */ public
InputStream
un
Zip
(
InputStream
in,String fi
Zip
包的读取与写入
目录 一、
Zip
包的读取 二、
Zip
包的写入
Zip
InputStream
是一种FilterStream,它可以直接读取
zip
包的内容。
Zip
OutPutStream是一种FilterOutPutStream,它可以直接写入内容到
zip
包。 一、
Zip
包的读取
Zip
InputStream
的基本用法: 首先要创建
一个
Zip
InputStream
,通常是传入
一个
File
InputStream
作为数据源,然后循环调用getNext
Entry
(),当返回值为null时,表示
zip
流读取结束。 一
java
zip
inputstream
_
Zip
InputStream
转换
我有
一个
java服务,它采用
一个
字节数组,以便将其转换为
一个
或多个pdf文件或jpg文件 . 我知道这项服务工作,因为它是从另
一个
正确发送文件而没有问题的java系统调用的 . 现在我需要从
一个
角度js系统调用这个服务,字节数组,一旦到达java应用程序,它首先转换为
Byte
Array
InputStream
而没有问题,然后
Byte
Array
InputStream
将它转换为
Zip
InputStrea...
1、文件
ZIp
的对
byte
[]的压缩和解压缩
最近在做
一个
邮件系统,因为要和原来系统兼容,原系统是吧上传的附件进行
zip
压缩,然后按照32k分段存储,查询了API和相关资料,整理出文件的
zip
的压缩和解压缩方法,代码如下: 首先: 1、将文件转化为
byte
[]数组 private
byte
[] get
Byte
sFromFile(File file) throws IOException {
InputStream
zip
压缩流转本地文件及解压
有
一个
需求,HTTP获取到
zip
文件的
byte
数组,需要转为本地的
zip
或是解压
zip
文件。 1. 用到的class import java.io.FileOutputStream; import java.util.
zip
.
Zip
Entry
; import java.util.
zip
.
Zip
InputStream
; import java.util.
zip
.
Zip
OutputStre
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章