如何从Java中的文件创建ByteArrayInputStream?
我有一个文件,可以是任何东西,如ZIP、RAR、txt、CSV、doc等。我想从中创建ByteArrayInputStream。如何从Java中的文件创建ByteArrayInputStream?,java,arrays,bytebuffer,bytearrayinputstream,Java,Arrays,Bytebuffer,Bytearrayinputstream,我有一个文件,可以是任何东西,如ZIP、RAR、txt、CSV、doc等。我想从中创建ByteArrayInputStream。 我用它从ApacheCommonsNet通过FTPClient将一个文件上传到FTP 有人知道怎么做吗? 例如: String data = "hdfhdfhdfhd"; ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes()); 我的代码: public static ByteArray
我用它从ApacheCommonsNet通过FTPClient将一个文件上传到FTP 有人知道怎么做吗? 例如:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
我的代码:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
使用from,然后使用构造函数创建ByteArrayInputStream
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
一般的想法是,一个文件将产生一个
FileInputStream
和一个byte[]
aByteArrayInputStream
。两者都实现了InputStream
,因此它们应该与使用InputStream
作为参数的任何方法兼容
当然,可以将所有文件内容放入ByteArrayInputStream
中:
字节[]
;Java版本>=7包含从文件读取所有数据的命令李>
ByteArrayInputStream
,文件内容现在位于内存中请注意,这可能不是非常大的文件的最佳解决方案-所有文件将在同一时间点存储在内存中。为作业使用正确的流是很重要的。这并不是您想要的,而是一种快速读取字节文件的方法
File file = new File(yourFileName);
RandomAccessFile ra = new RandomAccessFile(yourFileName, "rw"):
byte[] b = new byte[(int)file.length()];
try {
ra.read(b);
} catch(Exception e) {
e.printStackTrace();
}
//Then iterate through b
ByteArrayInputStream
是围绕字节数组的InputStream
包装器。这意味着您必须将文件完全读入字节[]
,然后使用ByteArrayInputStream
构造函数之一
您能否提供更多关于您正在使用ByteArrayInputStream
执行的操作的详细信息?很可能有更好的方法来实现你的目标
编辑:如果您使用ApacheFTPClient进行上传,您只需要一个
InputStream
。你可以这样做
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);
当然,您应该记住在完成输入流后关闭它。这段代码非常方便:
private static byte[] readContentIntoByteArray(File file)
{
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) file.length()];
try
{
//convert file into array of bytes
fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return bFile;
}
参考:对于以字节为单位的文件读取,我使用RandomAccessFile并首先将整个文件字节传输到字节数组中。我发现这是一种非常快速的读取字节文件的方法。你为什么要这样做?您可以通过将文件输入流复制到ByteArrayInputStream,然后从中创建ByteArrayInputStream来实现这一点。这当然是毫无意义的。请解释一下你的用例。您可能只需要一个FileInputStream。一旦你有了它,你打算如何使用它?我承认这有点不必要,但我发现它是阅读文件最快的方式之一,如果你喜欢速度的话。然后我又知道了使用C…这似乎比从
文件输入流
读取要慢得多,不是吗?我用它通过FTPClient commons Apache将文件上传到ftp。我建议不要“记住关闭输入流”。正如我在回答中指出的,Java 7在Files类中已经包含了readFileToByteArray,不需要额外的库。小注:Java还包含内存映射文件的方法,如果需要执行随机读写,这可能会更有益。从文件流式传输数据不是唯一的选择,也不总是最好的选择。