首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中从文件创建ByteArrayInputStream?

如何在Java中从文件创建ByteArrayInputStream?
EN

Stack Overflow用户
提问于 2012-06-27 18:12:57
回答 5查看 103.2K关注 0票数 29

我有一个文件,可以是任何东西像ZIP,RAR,txt,CSV,文件等。我想创建一个ByteArrayInputStream从它。

我正在使用它通过FTPClient从Apache Commons Net上传一个文件到FTP。

有人知道怎么做吗?

例如:

代码语言:javascript
复制
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());

我的代码:

代码语言:javascript
复制
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    ByteArrayInputStream in;

    return in;     
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-27 18:18:08

使用Apache Commons IO中的FileUtils#readFileToByteArray(File),然后使用ByteArrayInputStream(byte[])构造函数创建ByteArrayInputStream

代码语言:javascript
复制
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
票数 52
EN

Stack Overflow用户

发布于 2012-06-27 18:19:57

一般的想法是,文件会产生一个FileInputStream,而byte[]会产生一个ByteArrayInputStream。两者都实现了InputStream,因此它们应该与任何使用InputStream作为参数的方法兼容。

当然,可以将所有文件内容放入ByteArrayInputStream中:

  1. 将完整文件读取到byte[]中;Java版本>= 7包含从文件中读取所有数据的convenience method called readAllBytes
  2. 围绕文件内容创建一个ByteArrayInputStream,该内容现在位于内存中。

请注意,对于非常大的文件,这可能不是最佳解决方案-所有文件都将在同一时间点存储在内存中。为工作使用正确的流是很重要的。

票数 23
EN

Stack Overflow用户

发布于 2012-06-27 18:21:38

ByteArrayInputStream是一个围绕字节数组的InputStream包装器。这意味着您必须将文件完全读取到byte[]中,然后使用其中一个ByteArrayInputStream构造函数。

你能提供更多关于你正在用ByteArrayInputStream做什么的细节吗?很可能有更好的方法来实现你想要实现的目标。

编辑:

如果你正在使用Apache FTPClient上传,你只需要一个InputStream。你可以做到这一点;

代码语言:javascript
复制
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);

当然,您应该记得在使用完输入流之后关闭它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11223868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档