Я пытаюсь выяснить, почему этот фрагмент кода не работает для меня. У меня есть апплет, который должен читать .pdf и отображать его с помощью библиотеки pdf-рендерера, но по какой-то причине, когда я читаю в файлах .pdf, которые находятся на моем сервере, они оказываются поврежденными. Я проверил это, записав файлы обратно.
Я попытался просмотреть апплет в IE и Firefox, и появились поврежденные файлы. Самое смешное, что когда я пытаюсь просмотреть апплет в Safari (для Windows), файл на самом деле в порядке! Я понимаю, что JVM может быть другим, но я все еще потерялся. Я скомпилировал в Java 1.5. JVM 1.6. Фрагмент, который читает файл ниже.
public static ByteBuffer getAsByteArray(URL url) throws IOException {
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
URLConnection connection = url.openConnection();
int contentLength = connection.getContentLength();
InputStream in = url.openStream();
byte[] buf = new byte[512];
int len;
while (true) {
len = in.read(buf);
if (len == -1) {
break;
}
tmpOut.write(buf, 0, len);
}
tmpOut.close();
ByteBuffer bb = ByteBuffer.wrap(tmpOut.toByteArray(), 0,
tmpOut.size());
//Lines below used to test if file is corrupt
//FileOutputStream fos = new FileOutputStream("C:\\abc.pdf");
//fos.write(tmpOut.toByteArray());
return bb;
}
Я, должно быть, что-то упустил, и я бился головой, пытаясь понять это. Любая помощь очень ценится. Спасибо.
Edit:
Для дальнейшего разъяснения моей ситуации, разница в файле до того, как я прочитал его, затем с помощью фрагмента и после, состоит в том, что те, которые я выводил после чтения, значительно меньше, чем они были изначально. При их открытии они не распознаются как файлы .pdf. Нет никаких исключений, которые я игнорирую, и я попытался промыть безрезультатно.
Этот фрагмент работает в Safari, что означает, что файлы читаются полностью, без разницы в размере, и могут быть открыты с помощью любого читателя .pdf. В IE и Firefox файлы всегда оказываются поврежденными, постоянно одинакового меньшего размера.
Я контролировал переменную len (при чтении файла 59 КБ), надеясь увидеть, сколько байтов считывается в каждом цикле. В IE и Firefox, в 18 КБ, in.read (buf) возвращает -1, как если бы файл закончился. Safari не делает этого.
Я буду продолжать, и я ценю все предложения до сих пор.