Как преобразовать ByteBuffer в FileInputStream в Java?

Я пытаюсь импортировать лист xls в БД, для этого, когда я загружаю файл, загруженный файл находится в формате ByteBuffer, я написал логику, которая читается как FileInputStream.

Теперь, как мне преобразовать этот ByteBuffer в FileInputStream

Вот мой код

        ByteBuffer fileBytes = (ByteBuffer) context.get("uploadedFile");
        String encoding = System.getProperty("file.encoding");
        String filename = Charset.forName(encoding).decode(fileBytes).toString();
        filename = filename.replaceAll("\\r", "");

Я попытался использовать его с помощью ByteArrayInputStream(), но похоже, что он не работает!


person Raghu Chandra    schedule 12.03.2015    source источник
comment
Вот ответ на связанный вопрос, который может помочь stackoverflow.com/a/6603018/16959   -  person Jason Sperske    schedule 12.03.2015


Ответы (1)


  1. Измените свою логику, чтобы использовать InputStream, а не FileInputStream. Вам все равно, откуда поступает ввод.
  2. Используйте следующий код:

    ByteArrayInputStream bais = new ByteArrayInputStream(buffer.array(), buffer.position(), buffer.limit());
    

и передайте bais вашему существующему методу.

person user207421    schedule 12.03.2015
comment
Похоже, файл передается правильно, но я думаю, что apache poi не может его прочитать! Я получаю эту ошибку java.io.IOException: невозможно прочитать весь заголовок; прочитано 0 байт; ожидается 512 байт - person Raghu Chandra; 12.03.2015
comment
Бесполезно рассказывать нам о сообщении об ошибке, не публикуя всю трассировку стека и не показывая нам, какая строка кода ее вызвала. Вы не опубликовали код для своей «логики», но почти бесконечно более вероятно, что ошибка находится там, а не в однострочнике, который я разместил выше. - person user207421; 12.03.2015
comment
Спасибо, ЭДЖП! проблема исправлена ​​сейчас! выполнение всего лишь new ByteArrayInputStream(fileBytes.array()); будет отлично работать в случае импорта Excel! PS: опубликовал это, так как это может помочь другим поискам решения... - person Raghu Chandra; 12.03.2015
comment
Это не тот код, который я предоставил, и в общем случае он не будет работать. Если вы нашли этот ответ полезным, вам следует подумать о том, чтобы проголосовать за него или принять его, или и то, и другое. Это также поможет другим найти решение. - person user207421; 12.03.2015