У меня есть следующий код:
@POST
@Path("/csv")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String populateCSV(@FormDataParam("data") InputStream fileInputStream) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
File initialFile = new File("/Users/me/Downloads/file.csv");
InputStream targetStream = FileUtils.openInputStream(initialFile);
CSVReader reader = new CSVReader(new InputStreamReader(targetStream), ',', '"', 0);
CSVReader jerseyReader = new CSVReader(new InputStreamReader(fileInputStream), ',', '"', 0);
List<String[]> fileAllRows = reader.readAll();
List<String[]> jerseyAllRows = jerseyReader.readAll();
return null;
}
jerseyAllRows
, созданный из CSVReader
, который считывает преобразование файла Джерси в InputStream, возвращает пустые строки, а fileAllRows
, созданный из FileInputStream
, содержащего тот же файл, который отправляется в джерси, возвращает 3 строки.
Что заставляет то, как Джерси2 читает файл, создает другой InputStream?
Мне нужно опубликовать файл на Jersey2 и иметь возможность анализировать его с помощью OpenCSV.
ОТРЕДАКТИРОВАНО
Если я преобразую входной поток трикотажа в строку следующим образом:
InputStream is = new ByteArrayInputStream(IOUtils.toString(inputStream).getBytes());
reader = new CSVReader(new InputStreamReader(is), ',', '"', 0);
Я получаю линии. но это пустая трата памяти :( Есть идеи?