Как создать ByteArrayInputStream из файла на Java?
у меня есть файл, который может быть любым, как ZIP, RAR, txt, CSV, doc и т. д. Я хотел бы создать ByteArrayInputStream от него.
Я использую его для загрузки файла на FTP через FTPClient из сети Apache Commons.
кто-нибудь знает, как это сделать?
например:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
мой код:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
5 ответов
использовать FileUtils#readFileToByteArray(File)
С Apache Commons IO, а затем создать ByteArrayInputStream
С помощью ByteArrayInputStream(byte[])
конструктор.
public static ByteArrayInputStream reteriveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
общая идея заключается в том, что файл будет уступать FileInputStream
и byte[]
a ByteArrayInputStream
. Оба реализуют InputStream
поэтому они должны быть совместимы с любым методом, который использует InputStream
в качестве параметра.
положить все содержимое файла в ByteArrayInputStream
можно сделать конечно:
- читать в полном файле в
byte[]
; версия Java >= 7 содержит удобный метод называетсяreadAllBytes
для чтения всех данных из файла; - создать
ByteArrayInputStream
вокруг содержимого файла, которое теперь находится в памяти.
обратите внимание, что это не может быть оптимальным решением для очень больших файлов - все файлы будут храниться в памяти в тот же момент времени. Важно использовать правильный поток для работы.
A ByteArrayInputStream
это InputStream
обертка вокруг массива байтов. Это означает, что вам придется полностью прочитать файл в byte[]
, а затем использовать ByteArrayInputStream
конструкторы.
можете ли вы дать более подробную информацию о том, что вы делаете с ByteArrayInputStream
? Вероятно, есть лучшие способы обойти то, что вы пытаетесь достичь.
Edit:
Если вы используете Apache FTPClient для загрузки, вам просто нужно 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;
}
ссылка: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/
Это не совсем то, что вы просите, но это быстрый способ чтения файлов в байтах.
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