- 浏览: 854197 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充。今天得空,整理一下ZIP的java原生实现。
看了几篇zip压缩算法的帖子,讲的算是比较细致了,但就是没有对应的解压缩实现,太惜败了! 我就喜欢没事做总结,稍作整理,将其收纳!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
查过相关资料后才知道,ZIP应该算作归档类的压缩算法,每一门学科都可深可浅!
闲言少叙,先说ZIP压缩。
zip压缩需要通过ZipOutputStream 执行write方法将压缩数据写到指定输出流中。
注意,这里应先使用CheckedOutputStream 指定文件校验算法。(通常使用CRC32算法)。代码如下所示:
接下来,需要将待压缩文件以ZipEntry的方式追加到压缩文件中,如下所示:
ZipEntry就是压缩包中的每一个实体!
完成上述准备后,就可以执行压缩操作了。实际上,就是执行ZipOutputStream类的write方法,如下所示:
当然,如果待添加的压缩项是一个目录。那么,需要通过递归的方式指定最终的压缩项。
如果要添加一个空目录,注意使用符号"/"(String PATH="/";)作为添加项名字结尾符!
递归构建目录压缩,代码如下:
x是一个空目录,用WinRAR打开后,可以看到这个目录下还有一个空文件名文件!
来个完整的压缩实现,代码如下所示:
来做个简单的测试:
现在用WinRAR打开看看,是不是效果几乎一致?
当然,上述代码有所不足之处主要是中文名称乱码问题。用java原生ZIP实现压缩后得到的压缩包,与系统的字符集不同,文件/目录名将出现乱码。这是所有归档压缩都会遇到的问题。对于这种问题,Commons Copress提供了解决方案!
对于解压缩,请关注后续内容!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
看了几篇zip压缩算法的帖子,讲的算是比较细致了,但就是没有对应的解压缩实现,太惜败了! 我就喜欢没事做总结,稍作整理,将其收纳!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
查过相关资料后才知道,ZIP应该算作归档类的压缩算法,每一门学科都可深可浅!
闲言少叙,先说ZIP压缩。
zip压缩需要通过ZipOutputStream 执行write方法将压缩数据写到指定输出流中。
注意,这里应先使用CheckedOutputStream 指定文件校验算法。(通常使用CRC32算法)。代码如下所示:
- CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(destPath), new CRC32());
- ZipOutputStream zos = new ZipOutputStream(cos);
CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(destPath), new CRC32()); ZipOutputStream zos = new ZipOutputStream(cos);
接下来,需要将待压缩文件以ZipEntry的方式追加到压缩文件中,如下所示:
- /**
- * 压缩包内文件名定义
- *
- * <pre>
- * 如果有多级目录,那么这里就需要给出包含目录的文件名
- * 如果用WinRAR打开压缩包,中文名将显示为乱码
- * </pre>
- */
- ZipEntry entry = new ZipEntry(dir + file.getName());
- zos.putNextEntry(entry);
/** * 压缩包内文件名定义 * * <pre> * 如果有多级目录,那么这里就需要给出包含目录的文件名 * 如果用WinRAR打开压缩包,中文名将显示为乱码 * </pre> */ ZipEntry entry = new ZipEntry(dir + file.getName()); zos.putNextEntry(entry);
ZipEntry就是压缩包中的每一个实体!
完成上述准备后,就可以执行压缩操作了。实际上,就是执行ZipOutputStream类的write方法,如下所示:
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
- file));
- int count;
- byte data[] = new byte[BUFFER];
- while ((count = bis.read(data, 0, BUFFER)) != -1) {
- zos.write(data, 0, count);
- }
- bis.close();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { zos.write(data, 0, count); } bis.close();
当然,如果待添加的压缩项是一个目录。那么,需要通过递归的方式指定最终的压缩项。
如果要添加一个空目录,注意使用符号"/"(String PATH="/";)作为添加项名字结尾符!
递归构建目录压缩,代码如下:
- /**
- * 压缩
- *
- * @param srcFile
- * 源路径
- * @param zos
- * ZipOutputStream
- * @param basePath
- * 压缩包内相对路径
- * @throws Exception
- */
- private static void compress(File srcFile, ZipOutputStream zos,
- String basePath) throws Exception {
- if (srcFile.isDirectory()) {
- compressDir(srcFile, zos, basePath);
- } else {
- compressFile(srcFile, zos, basePath);
- }
- }
- /**
- * 压缩目录
- *
- * @param dir
- * @param zos
- * @param basePath
- * @throws Exception
- */
- private static void compressDir(File dir, ZipOutputStream zos,
- String basePath) throws Exception {
- File[] files = dir.listFiles();
- // 构建空目录
- if (files.length < 1) {
- ZipEntry entry = new ZipEntry(basePath + dir.getName() + PATH);
- zos.putNextEntry(entry);
- zos.closeEntry();
- }
- for (File file : files) {
- // 递归压缩
- compress(file, zos, basePath + dir.getName() + PATH);
- }
- }
/** * 压缩 * * @param srcFile * 源路径 * @param zos * ZipOutputStream * @param basePath * 压缩包内相对路径 * @throws Exception */ private static void compress(File srcFile, ZipOutputStream zos, String basePath) throws Exception { if (srcFile.isDirectory()) { compressDir(srcFile, zos, basePath); } else { compressFile(srcFile, zos, basePath); } } /** * 压缩目录 * * @param dir * @param zos * @param basePath * @throws Exception */ private static void compressDir(File dir, ZipOutputStream zos, String basePath) throws Exception { File[] files = dir.listFiles(); // 构建空目录 if (files.length < 1) { ZipEntry entry = new ZipEntry(basePath + dir.getName() + PATH); zos.putNextEntry(entry); zos.closeEntry(); } for (File file : files) { // 递归压缩 compress(file, zos, basePath + dir.getName() + PATH); } }
x是一个空目录,用WinRAR打开后,可以看到这个目录下还有一个空文件名文件!
来个完整的压缩实现,代码如下所示:
- /**
- * 2010-4-12
- */
- package org.zlex.commons.io;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.util.zip.CRC32;
- import java.util.zip.CheckedInputStream;
- import java.util.zip.CheckedOutputStream;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
- import java.util.zip.ZipOutputStream;
- /**
- * ZIP压缩工具
- *
- * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
- * @since 1.0
- */
- public class ZipUtils {
- public static final String EXT = ".zip";
- private static final String BASE_DIR = "";
- // 符号"/"用来作为目录标识判断符
- private static final String PATH = "/";
- private static final int BUFFER = 1024;
- /**
- * 压缩
- *
- * @param srcFile
- * @throws Exception
- */
- public static void compress(File srcFile) throws Exception {
- String name = srcFile.getName();
- String basePath = srcFile.getParent();
- String destPath = basePath + name + EXT;
- compress(srcFile, destPath);
- }
- /**
- * 压缩
- *
- * @param srcFile
- * 源路径
- * @param destPath
- * 目标路径
- * @throws Exception
- */
- public static void compress(File srcFile, File destFile) throws Exception {
- // 对输出文件做CRC32校验
- CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(
- destFile), new CRC32());
- ZipOutputStream zos = new ZipOutputStream(cos);
- compress(srcFile, zos, BASE_DIR);
- zos.flush();
- zos.close();
- }
- /**
- * 压缩文件
- *
- * @param srcFile
- * @param destPath
- * @throws Exception
- */
- public static void compress(File srcFile, String destPath) throws Exception {
- compress(srcFile, new File(destPath));
- }
- /**
- * 压缩
- *
- * @param srcFile
- * 源路径
- * @param zos
- * ZipOutputStream
- * @param basePath
- * 压缩包内相对路径
- * @throws Exception
- */
- private static void compress(File srcFile, ZipOutputStream zos,
- String basePath) throws Exception {
- if (srcFile.isDirectory()) {
- compressDir(srcFile, zos, basePath);
- } else {
- compressFile(srcFile, zos, basePath);
- }
- }
- /**
- * 压缩
- *
- * @param srcPath
- * @throws Exception
- */
- public static void compress(String srcPath) throws Exception {
- File srcFile = new File(srcPath);
- compress(srcFile);
- }
- /**
- * 文件压缩
- *
- * @param srcPath
- * 源文件路径
- * @param destPath
- * 目标文件路径
- *
- */
- public static void compress(String srcPath, String destPath)
- throws Exception {
- File srcFile = new File(srcPath);
- compress(srcFile, destPath);
- }
- /**
- * 压缩目录
- *
- * @param dir
- * @param zos
- * @param basePath
- * @throws Exception
- */
- private static void compressDir(File dir, ZipOutputStream zos,
- String basePath) throws Exception {
- File[] files = dir.listFiles();
- // 构建空目录
- if (files.length < 1) {
- ZipEntry entry = new ZipEntry(basePath + dir.getName() + PATH);
- zos.putNextEntry(entry);
- zos.closeEntry();
- }
- for (File file : files) {
- // 递归压缩
- compress(file, zos, basePath + dir.getName() + PATH);
- }
- }
- /**
- * 文件压缩
- *
- * @param file
- * 待压缩文件
- * @param zos
- * ZipOutputStream
- * @param dir
- * 压缩文件中的当前路径
- * @throws Exception
- */
- private static void compressFile(File file, ZipOutputStream zos, String dir)
- throws Exception {
- /**
- * 压缩包内文件名定义
- *
- * <pre>
- * 如果有多级目录,那么这里就需要给出包含目录的文件名
- * 如果用WinRAR打开压缩包,中文名将显示为乱码
- * </pre>
- */
- ZipEntry entry = new ZipEntry(dir + file.getName());
- zos.putNextEntry(entry);
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
- file));
- int count;
- byte data[] = new byte[BUFFER];
- while ((count = bis.read(data, 0, BUFFER)) != -1) {
- zos.write(data, 0, count);
- }
- bis.close();
- zos.closeEntry();
- }
- }
/** * 2010-4-12 */ package org.zlex.commons.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.CRC32; import java.util.zip.CheckedInputStream; import java.util.zip.CheckedOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /** * ZIP压缩工具 * * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a> * @since 1.0 */ public class ZipUtils { public static final String EXT = ".zip"; private static final String BASE_DIR = ""; // 符号"/"用来作为目录标识判断符 private static final String PATH = "/"; private static final int BUFFER = 1024; /** * 压缩 * * @param srcFile * @throws Exception */ public static void compress(File srcFile) throws Exception { String name = srcFile.getName(); String basePath = srcFile.getParent(); String destPath = basePath + name + EXT; compress(srcFile, destPath); } /** * 压缩 * * @param srcFile * 源路径 * @param destPath * 目标路径 * @throws Exception */ public static void compress(File srcFile, File destFile) throws Exception { // 对输出文件做CRC32校验 CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream( destFile), new CRC32()); ZipOutputStream zos = new ZipOutputStream(cos); compress(srcFile, zos, BASE_DIR); zos.flush(); zos.close(); } /** * 压缩文件 * * @param srcFile * @param destPath * @throws Exception */ public static void compress(File srcFile, String destPath) throws Exception { compress(srcFile, new File(destPath)); } /** * 压缩 * * @param srcFile * 源路径 * @param zos * ZipOutputStream * @param basePath * 压缩包内相对路径 * @throws Exception */ private static void compress(File srcFile, ZipOutputStream zos, String basePath) throws Exception { if (srcFile.isDirectory()) { compressDir(srcFile, zos, basePath); } else { compressFile(srcFile, zos, basePath); } } /** * 压缩 * * @param srcPath * @throws Exception */ public static void compress(String srcPath) throws Exception { File srcFile = new File(srcPath); compress(srcFile); } /** * 文件压缩 * * @param srcPath * 源文件路径 * @param destPath * 目标文件路径 * */ public static void compress(String srcPath, String destPath) throws Exception { File srcFile = new File(srcPath); compress(srcFile, destPath); } /** * 压缩目录 * * @param dir * @param zos * @param basePath * @throws Exception */ private static void compressDir(File dir, ZipOutputStream zos, String basePath) throws Exception { File[] files = dir.listFiles(); // 构建空目录 if (files.length < 1) { ZipEntry entry = new ZipEntry(basePath + dir.getName() + PATH); zos.putNextEntry(entry); zos.closeEntry(); } for (File file : files) { // 递归压缩 compress(file, zos, basePath + dir.getName() + PATH); } } /** * 文件压缩 * * @param file * 待压缩文件 * @param zos * ZipOutputStream * @param dir * 压缩文件中的当前路径 * @throws Exception */ private static void compressFile(File file, ZipOutputStream zos, String dir) throws Exception { /** * 压缩包内文件名定义 * * <pre> * 如果有多级目录,那么这里就需要给出包含目录的文件名 * 如果用WinRAR打开压缩包,中文名将显示为乱码 * </pre> */ ZipEntry entry = new ZipEntry(dir + file.getName()); zos.putNextEntry(entry); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { zos.write(data, 0, count); } bis.close(); zos.closeEntry(); } }
来做个简单的测试:
- import static org.junit.Assert.*;
- import org.junit.Test;
- /**
- *
- * @author 梁栋
- * @version 1.0
- * @since 1.0
- */
- public class ZipUtilsTest {
- /**
- *
- */
- @Test
- public void test() throws Exception {
- // 压缩文件
- ZipUtils.compress("d:\\f.txt");
- // 压缩目录
- ZipUtils.compress("d:\\fd");
- }
- }
import static org.junit.Assert.*; import org.junit.Test; /** * * @author 梁栋 * @version 1.0 * @since 1.0 */ public class ZipUtilsTest { /** * */ @Test public void test() throws Exception { // 压缩文件 ZipUtils.compress("d:\\f.txt"); // 压缩目录 ZipUtils.compress("d:\\fd"); } }
现在用WinRAR打开看看,是不是效果几乎一致?
当然,上述代码有所不足之处主要是中文名称乱码问题。用java原生ZIP实现压缩后得到的压缩包,与系统的字符集不同,文件/目录名将出现乱码。这是所有归档压缩都会遇到的问题。对于这种问题,Commons Copress提供了解决方案!
对于解压缩,请关注后续内容!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
发表评论
-
eclispe 实用插件大全
2016-03-31 10:17 836在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的 ... -
单点登录 SSO Session
2016-03-14 16:56 4052单点登录在现在的 ... -
通用权限管理设计 之 数据库结构设计
2016-01-26 13:22 2952通用权限管理设计 之 ... -
分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
2016-01-26 13:22 1493分享一个基于ligerui的系统应用案例ligerRM V2 ... -
通用权限管理设计 之 数据权限
2016-01-26 13:20 740通用权限管理设计 之 数据权限 阅读目录 前 ... -
使用RSA进行信息加密解密的WebService示例
2015-12-28 10:30 876按:以下文字涉及RS ... -
防止网站恶意刷新
2015-10-22 10:55 706import java.io.IOExcept ... -
单点登录
2015-10-19 14:24 763Cas自定义登录页面Ajax实现 博客分类: ... -
session如何在http和https之间同步
2015-09-14 09:25 2255首先说下 http>https>http ... -
基于 Quartz 开发企业级任务调度应用
2015-08-17 11:17 839Quartz 是 OpenSy ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2015-08-17 11:17 878今天来点实际工 ... -
Java加密技术(十)——单向认证
2015-08-13 10:13 679在Java 加密技术(九)中,我们使 ... -
Java加密技术(九)——初探SSL
2015-08-13 10:12 886在Java加密技术(八)中,我们模拟 ... -
Java加密技术(八)——数字证书
2015-08-13 10:12 891本篇的主要内容为Java证书体系的实 ... -
Java加密技术(七)——非对称加密算法最高级ECC
2015-08-13 10:12 975ECC ECC-Elliptic Curv ... -
Java加密技术(六)——数字签名算法DSA
2015-08-13 10:11 1061接下来我们介绍DSA数字签名,非对称 ... -
Java加密技术(五)——非对称加密算法的由来DH
2015-08-12 16:13 870接下来我们 ... -
Java加密技术(四)——非对称加密算法RSA
2015-08-12 16:11 1096接下来我们介绍典型的非对称加密算法—— ... -
Java加密技术(三)——PBE算法
2015-08-12 16:10 960除了DES,我们还知道有DESede( ... -
Java加密技术(二)——对称加密算法DES&AES
2015-08-12 16:09 719接下来我们介绍对称加密算法,最常用的莫 ...
相关推荐
本篇将聚焦于Java原生实现的ZIP解压缩方法,主要通过分析提供的两个文件:`ZipUtils.java`和`ZipUtilsTest.java`来阐述相关知识点。 首先,`ZipUtils.java`可能包含了一组静态方法,用于处理ZIP压缩文件。这些方法...
本篇文章主要聚焦于Java原生实现的GZIP压缩技术。GZIP是一种广泛使用的压缩算法,它基于DEFLATE算法,同时也被用于创建.gz格式的压缩文件。在Java中,我们可以直接使用java.util.zip包下的GZIPOutputStream和...
ZLib ZIP 压缩——Java 原生实现 ZIP 解压缩——Java 原生实现 GZIP——Java 原生实现 GZIP 相关——浏览器解析 BZIP2——Commons 实现 TAR——Commons 实现
这表明,"VL_Example_Java.zip"是一个使用Java原生API或第三方库(如Apache Commons Compress)进行压缩的文件。 "bookumj"这部分可能是项目名称或者一个特定的模块标识,具体含义可能需要结合实际代码来理解。在...
【标题】"sevenzipjbinding" 是一个Java库,它为Java应用程序提供了使用7-Zip压缩和解压缩文件的功能。7-Zip是一款流行的开源压缩工具,以其高效且支持多种压缩格式而闻名。"sevenzipjbinding"使得Java开发者能够...
本资源"**inotify-java-2.1.zip**"包含了Java版的Inotify接口实现——Inotify.jar,以及必要的本地库(so文件),使Java开发者能够利用Inotify功能来监听文件系统的各种事件。 Inotify的主要优势在于,它减少了应用...
5. **RAR压缩与解压**:RAR是一种流行的文件压缩格式,而Android原生并不支持RAR文件的解压。因此,开发者可能需要引入第三方库,如`com.github.yingzhuo:fastandroid:1.0.6`,来实现RAR文件的读取和解压缩。这涉及...
在【压缩包子文件的文件名称列表】中,虽然列出的是"安卓Android源码——WebViewDemo.rar",但通常RAR和ZIP是类似的压缩格式,用于打包多个文件和文件夹。在这个案例中,这个RAR文件可能包含了以下内容: 1. `...
【标题】"安卓Android源码——jqmDemo_static.zip" 提供的是一个基于Android平台的项目,其中包含了一些用于构建用户界面的HTML文件,可能是为了实现类似iOS风格的交互体验。这个项目可能采用了jQuery Mobile(jqm)...
"安卓"和"android"标签表明这是与Google的Android操作系统相关的项目,因此会使用Java或Kotlin等Android原生语言,并且可能涉及到Android SDK和相关开发工具的使用。 【文件名称列表】 虽然实际提供的文件名为"安卓...
【压缩包子文件的文件名称列表】显示的是"安卓Android源码——ViewFlowTest 完美实现gallry轮训效果!!!.rar",这是一个RAR格式的压缩包,通常包含了项目的全部源代码、资源文件、编译配置等。解压后,我们可以...
"安卓Android源码——android仪表盘.zip" 这个标题明确指出,我们即将探讨的是与安卓(Android)操作系统相关的源代码,特别是关于“仪表盘”部分。在Android系统中,仪表盘通常指的是用户界面中的控件或者应用,...
这两个工具都是流行的Java反编译解决方案,能够将.class文件显示为接近原生的Java源代码。 - "Archiver.exe"可能是一个归档工具,用于创建、管理和提取各种类型的压缩文件,可能与软件的打包或部署过程有关。 - ...
【标题】"安卓Android源码——游戏源码经典贪吃蛇项目全套资料.zip" 提供的是一个关于Android平台上的游戏开发实例,特别是经典的贪吃蛇游戏的完整源代码。这是一份非常适合Android开发者,尤其是对游戏编程感兴趣的...
"安卓Android源码——捕鱼达人源代码.zip" 这个标题表明我们正在处理一个关于安卓平台的游戏应用源代码,具体是“捕鱼达人”。捕鱼达人是一款流行的休闲娱乐游戏,玩家通过发射炮弹捕获屏幕上的各种鱼类来获得积分。...
【描述】描述中提到的"安卓Android源码——rokon_src_2-0-3_游戏引擎.zip"暗示这是一份完整的源代码,包含了实现Rokon游戏引擎功能的所有文件。开发者可以深入研究源代码,了解其内部机制,进行自定义修改或扩展,以...
在自定义浏览器中,WebView是核心部分,通过JavaScript接口可以实现与原生代码的交互。 3. **源码分析**:通过阅读Zirco-browser的源码,开发者可以了解浏览器的请求处理、页面渲染、用户交互、隐私设置等模块的...
【标题】"安卓Android源码——仿小米便签"是一个关于安卓应用开发的项目,它旨在实现一个类似于小米便签的应用。这个项目的核心是通过分析和理解小米便签的功能和界面设计,用Android原生代码来创建一个类似的用户...
虽然描述只有简单的一句“安卓Android源码——乐动力的酷黑旋转引导动画.zip”,但我们可以推测这应该是一个开源项目,开发者或学习者可以下载这个zip文件,查看并学习如何在Android平台上实现酷炫的旋转引导动画。...
【标题】"安卓Android源码——OA精灵2011_版.zip"揭示了这是一个关于Android操作系统的开源项目,具体是OA精灵的2011年版本。OA(Office Automation)精灵通常指的是一个用于自动化办公流程的应用程序,可能是为了...