【问题标题】:Can I create a byte[] straight from a folder?我可以直接从文件夹创建一个 byte[] 吗?
【发布时间】:2013-02-08 01:31:03
【问题描述】:

Web 服务需要来自 zip 文件的 byte[]

我有一些文件在我用 Java 压缩的文件夹中,然后我从这个 zip 文件中得到 byte[]

这是必要的还是我可以直接从文件夹中创建byte[]

【问题讨论】:

  • Web 服务是否需要包含多个文件的 zip?如果是这样,我认为您可以将文件添加到 ZipStream 并将其发送到 Web 服务而不写入磁盘(如果它们对于内存来说不是太大的话)。
  • @hack_on,WS 需要一个来自 byte[] 的 Base64Binary。在使用 WS 的管理 GUI 控制台中,它允许您上传 zip 文件。

标签: java zip bytearray directory


【解决方案1】:

我认为这样的事情可以让你在不写的情况下做你想做的事,只要文件不会很大。

String[] sourceFiles = { "C:/file1", "C:/file2" };

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zout = new ZipOutputStream(baos);

byte[] buffer = new byte[4096];

for (int i = 0; i < sourceFiles.length; i++)
{
    FileInputStream fin = new FileInputStream(sourceFiles[i]);
    zout.putNextEntry(new ZipEntry(sourceFiles[i]));

    int length;
    while ((length = fin.read(buffer)) > 0)
    {
        zout.write(buffer, 0, length);
    }

    zout.closeEntry();
    fin.close();
}

zout.close();

byte[] bytes = baos.toByteArray();

【讨论】:

  • 谢谢@hack_on,这看起来就像我正在寻找的东西。 ByteAarayOutputStream 类是问题的交换,也是我不知道的。我会试试看。
  • 最后还是不行。在异常堆栈上,它说明了试图解压缩的服务出错,所以我想它确实需要压缩它。还是谢谢。
  • @eskalera 上面的代码确实压缩文件。也许您可以将堆栈跟踪放在您的问题中,然后有人会找出还有什么问题?
  • 不确定我做了什么,但我今天又试了一次,现在可以了。所以你的代码是正确的。非常感谢。
【解决方案2】:

文件夹是文件的集合。它是一个容器。首先它没有 byte 流。

另一方面,ZIP(或任何存档)是文件。关于不同文件的信息存储在 ZIP 文件中本身

但是,您可以遍历文件夹内容,创建一个字节数组,然后使用它(无论如何,您在创建 ZIP 时都会这样做)。

【讨论】:

  • 煮熟的字节数组是否与压缩文件中的字节数组相同?如果是这种情况,我会避免在磁盘上创建文件。
  • 可能不会。 ZIP 文件将包含其自身的信息。加上它包含的文件的元数据,然后是实际的文件数据(压缩)。另一方面,通过迭代,您只使用文件本身。没有“ZIP 信息”的开销。
  • @Visruth :: 感谢您删除签名。习惯的力量。我很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 2013-08-13
  • 2019-03-21
相关资源
最近更新 更多