Я создал свой собственный HTTP-сервер. Мне нужно вернуть файл PDF (созданный Jasper Reports) в веб-браузер. Однако, когда я читаю файл PDF и записываю его содержимое в сокет, веб-браузер получает пустой файл PDF. Когда я сохраняю этот файл и сравниваю его с оригиналом, я вижу, что многие символы были преобразованы из исходного значения в 0x3F (что означает «?»).
Когда я читаю файл, мои выходные данные отладки показывают, что правильные значения читаются и что правильные значения записываются в сокет. Кто-нибудь может мне помочь?
Вот код (за вычетом всего кода отладки), который читает файл PDF:
File f = new File(strFilename);
long len = f.length();
byteBuffPdfData = ByteBuffer.allocate( (int)len );
FileInputStream in = new FileInputStream(strFilename);
boolean isEOF = false;
while (!isEOF)
{
int iValue = in.read();
if (iValue == -1)
{
isEOF = true;
}
else
{
byteBuffPdfData.put( (byte)iValue );
}
}
Далее идет код, который пишет из байтового буфера в сокет ...
printWriter = new PrintWriter( socket.getOutputStream(), true );
printWriter.write(strHttpHeaders);
// Headers:
// HTTP/1.0 200 OK
// Date: Wed, 18 Nov 2009 21:04:36
// Expires: Wed, 18 Nov 2009 21:09:36
// Cache-Control: public
// Content-Type: application/pdf
// Content-Length: 1811
// Connection: keep-alive
//
byteBuffPdfData.rewind();
while(byteBuffPdfData.hasRemaining())
{
printWriter.print( (char)byteBuffPdfData.get() );
}
printWriter.flush();
socket.close();
Любая помощь, которая может быть предложена, очень ценится. Я уверен, что мне нужно что-то делать с наборами символов, но на данный момент я перепробовал миллион вещей, и, похоже, ничего не работает.
John