在 Java 中检测流是否被压缩的最佳方法

2024-01-19

找出我的最佳方法是什么java.io.InputStream包含压缩数据?


介绍

由于所有答案都是 5 年前的,我觉得有责任写下今天发生的事情。我严重怀疑是否应该读取流的魔术字节!这是一个低级代码,通常应该避免。

简单回答

米库写道:

如果可以通过 ZipInputStream 读取 Stream,则应该对其进行压缩。

是的,但是如果出现以下情况ZipInputStream“可以读取”意味着首先调用.getNextEntry()返回一个非空值。捕捉等也不例外。因此,您可以这样做,而不是魔术字节解析:

boolean isZipped = new ZipInputStream(yourInputStream).getNextEntry() != null;

就是这样!

一般解压思路

一般来说,在[解]压缩时处理文件似乎比处理流要方便得多。有几个有用的库,而且 ZipFile 比 ZipInputStream 具有更多功能。这里讨论 zip 文件的处理:用于压缩/解压缩文件的优秀 Java 库是什么? https://stackoverflow.com/questions/9324933/what-is-a-good-java-library-to-zip-unzip-files因此,如果您可以处理文件,那么您最好这样做!

代码示例

我需要在我的应用程序中仅使用流。这就是我写的解压方法:

import org.apache.commons.io.IOUtils;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public boolean unzip(InputStream inputStream, File outputFolder) throws IOException {

    ZipInputStream zis = new ZipInputStream(inputStream);

    ZipEntry entry;
    boolean isEmpty = true;
    while ((entry = zis.getNextEntry()) != null) {
        isEmpty = false;
        File newFile = new File(outputFolder, entry.getName());
        if (newFile.getParentFile().mkdirs() && !entry.isDirectory()) {
            FileOutputStream fos = new FileOutputStream(newFile);
            IOUtils.copy(zis, fos);
            IOUtils.closeQuietly(fos);
        }
    }

    IOUtils.closeQuietly(zis);
    return !isEmpty;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中检测流是否被压缩的最佳方法 的相关文章

  • tar 和 zip 有什么区别? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 tar 和 zip 有什么区别 每个的用例是什么 tar其本身只是将文件捆绑在一起 结果称为tarball 尽管zip也应用压缩 通常你使用gzip随
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack

随机推荐

  • Java 中的流如何影响内存消耗?

    我已经多次使用流 但我从来没有读过太多关于它们实际工作原理的内容 除了流只是一个隐喻之外 我对它们也了解不多 流仅表示字节序列 我不太了解它们的实际工作原理 我猜想在 Java 中打开文件流与具有向流提供 指针 功能的操作系统进行交互 基本
  • 最小起订量静态类中的静态方法

    public Product GetbyID int id try mycode Product p catch DataAccessException ex throw new BusinessException ex ErrorCode
  • 为什么 Composer 无法正确安装 Laravel 5.6? [复制]

    这个问题在这里已经有答案了 我无法在我的电脑上安装 Laravel 5 6wamp服务器 我有以下设置 PHP 版本 7 1 3 作曲家版本1 6 3 2018 01 31 当我尝试通过 Composer 安装 Laravel 应用程序时
  • iPhone 单元测试

    我在大学的 iPhone 开发人员上完成了我的项目 没有做 有用的 单元测试 做了一些简单的测试只是为了放在我的报告上 我正在研究苹果的单元测试套件 逻辑和应用程序测试 但最终使用了 google toolbox for mac 中的 iP
  • 从 localStorage 保存和加载图像

    所以基本上 我试图将图像保存到localStorage 然后在下一页上加载相同的图像 我遇到了这个很好的例子 http jsfiddle net 8V9w6 http jsfiddle net 8V9w6 不过 我完全不知道这是如何工作的
  • 如何在没有表单标签的情况下更改 Mobile Safari 键盘中的返回键文本?

    我想更改 返回 按钮上的文本移动Safari当我的输入元素聚焦时的键盘 我知道你可以这样做
  • 如何继续处理 pandas fillna 中的“None”值

    我有以下字典 fillna value first name Andrii last name Furmanets created at None 当我把那本字典传给fillna I see raise ValueError 必须指定填充方
  • 如何写出 HTML 实体名称( 、<、> 等)

    我如何在 HTML 中编写实体名称而不让它执行其功能 示例 我正在做一个教程 想告诉某人如何在代码中使用不间断空格 nbsp 那么 如何实际写出 n b s p 但它是否流畅且没有空格 您可以使用 amp 代替 So nbsp 将 amp
  • 检查 ArrayList 是否包含给定对象

    假设我有这样的课程 class A int elementA int elementB 我也有一个ArrayList像这样 ArrayList a listObj 如何检查该列表是否包含仅使用某些属性的对象A 例如 仅考虑elementA用
  • 如何使 TFS 2015 中的 PowerShell 任务构建失败

    我试图使 PowerShell 脚本中的某个结果在构建过程中失败 但它对我不起作用 我正在使用 TFS 2015 中的新构建操作并尝试了以下选项 记录命令 https github com Microsoft vso agent tasks
  • nginx 静态索引重定向

    这看起来很荒谬 但我在一个多小时的搜索中没有找到有效的答案 我有一个运行 nginx 的静态网站 恰好位于 Varnish 后面 索引文件称为index html 我想重定向实际访问该 URL 的任何人mydomain com index
  • 计算图像特征配准中的仿射变换矩阵

    我有两张图像 一张是对另一张应用仿射变换的结果 我可以通过使用 OpenCV 中的 ORB create 函数提取点来使用单应性注册它们 但是 我想计算此变换所需的仿射矩阵 有什么方法可以简单地通过两张图像来做到这一点吗 检测旋转的矩形并使
  • 缓存和重用函数会导致 Tornado

    我有一个昂贵的功能要包含在我的 Tornado 应用程序中 功能 返回多个输出 但由于遗留原因 这些输出被访问 分别通过不同的处理程序 有没有办法只执行一次函数 然后将结果重复使用 不同的处理程序并保留 Tornado 的异步行为 from
  • AttributeError:“GridSearchCV”对象没有属性“best_params_”

    网格搜索是一种从我们指定的组合中找到任何模型的最佳参数的方法 我已经通过以下方式对我的模型进行了网格搜索 并希望找到使用此网格搜索识别的最佳参数 from sklearn model selection import GridSearchC
  • 为什么带有 Junit 5 的 spring Boot 2.4.5 和模拟 bean 会抛出 StackOverflowError?

    Context 升级后的gradle自5 5 1 to 7 0 2 已测试 一切正常 spring从2 1 5升级到2 4 1 将测试注释从 junit 4 迁移到 junit 5 Result 单元测试工作 集成测试DO NOT work
  • openshift 上的 Rails 控制台

    我将 Rails 应用程序部署到 openshift 它运行良好 但我无法在生产服务器上运行 rails 控制台 它给了我这个错误 我该如何解决这个问题 我尝试更新 ruby gems 但它也给出了权限被拒绝的错误 我也无法成功 导轨c错误
  • Python 3.5.1 - 将同一输入行上的多个整数读取到列表中

    我正在使用 python 3 5 1 并通过 Windows 上的命令提示符运行我的文件 参数在程序运行后传递 即程序根据先前生成的列表提示输入 我希望在同一行上读取多个数字 并用空格分隔 Python 2 X 中 raw input 不会
  • adb logcat -f log.txt 错误:无法打开输出文件:只读文件系统

    在 Windows win7 上 通过 USB 调试真实手机 我想将 logcat 日志转储到我的 PC 上的文件中 数据速率超出了 Eclipse 的可用范围 我想要整个未过滤的日志 根据logcat 命令行说明 http develop
  • 让 IAlert 作为观察者

    我正在使用最后的硒 一些网站会随机弹出消息 停止正常的测试过程 我的想法是 我需要将 IAlert 作为观察者模式来捕获警报 接受警报并从其停止处理弹出窗口的点继续测试 警报代码 try IAlert alert driver Switch
  • 在 Java 中检测流是否被压缩的最佳方法

    找出我的最佳方法是什么java io InputStream包含压缩数据 介绍 由于所有答案都是 5 年前的 我觉得有责任写下今天发生的事情 我严重怀疑是否应该读取流的魔术字节 这是一个低级代码 通常应该避免 简单回答 米库写道 如果可以通