Подтвердить что ты не робот

Как создать ByteArrayInputStream из файла в Java?

У меня есть файл, который может быть любым, например, ZIP, RAR, txt, CSV, doc и т.д. Я бы хотел создать из него ByteArrayInputStream. Я использую его для загрузки файла на FTP через FTPClient из Apache Commons Net.

Кто-нибудь знает, как это сделать?

Например:

String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());

Мой код:

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    ByteArrayInputStream in;

    return in;     
}
4b9b3361

Ответ 2

Общая идея заключается в том, что файл даст FileInputStream и byte[] a ByteArrayInputStream. Оба реализуют InputStream, поэтому они должны быть совместимы с любым методом, который использует InputStream в качестве параметра.

Поместить все содержимое файла в ByteArrayInputStream, конечно, можно:

  1. читать полный файл в byte[]; Версия Java> = 7 содержит удобный метод под названием readAllBytes для чтения всех данных из файла;
  2. создайте ByteArrayInputStream вокруг содержимого файла, которое сейчас находится в памяти.

Обратите внимание, что это не может быть оптимальным решением для очень больших файлов - все файлы будут храниться в памяти в один и тот же момент времени. Использование правильного потока для работы важно.

Ответ 3

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);

Вы должны, конечно, не забудьте закрыть входной поток, как только закончите с ним.

Ответ 4

Это не совсем то, что вы просите, но это быстрый способ чтения файлов в байтах.

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

Ответ 5

Этот кусок кода удобен:

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/