#java #image #http #webserver #response
#java #изображение #http #веб-сервер #ответ
Вопрос:
У меня возникли некоторые проблемы с написанием базового веб-сервера на JAVA. В настоящее время он отлично работает при доставке файлов html или css. Но когда дело доходит до изображений, все идет наперекосяк. Я предполагаю, что я делаю что-то не так при чтении файлов изображений и подготовке их к отправке. Но взгляните на код:
public void launch()
{
while(true)
{
try
{
Socket connection = this.server_socket.accept();
...
PrintWriter print_writer = new PrintWriter(connection.getOutputStream());
String response = this.readFile(this.request_header.get("Resource"));
print_writer.print(response);
print_writer.flush();
connection.close();
}
catch(...)
{
...
}
}
}
private String readFile(String path)
{
try
{
...
FileInputStream file_input_stream = new FileInputStream(path);
int bytes = file_input_stream.available();
byte[] response_body = new byte[bytes];
file_input_stream.read(response_body);
this.response_body = new String(response_body);
file_input_stream.close();
this.setResponseHeader(200, file_ext);
this.response_header = this.response_header "rnrn" this.response_body;
}
catch(...)
{
...
}
return this.response_header;
}
Итак, мой браузер получает что-то вроде:
HTTP/1.0 200 OK
Content-type: image/jpeg
[String that was read in readFile()]
Но chrome неправильно отображает изображение, и opera не покажет все это! Раньше я читал файл с помощью BufferedReader, но я обнаружил, что кто-то сказал, что BufferedReader не может правильно обрабатывать двоичные данные, поэтому я попробовал с FileInputStream, но проблема осталась прежней):
Заранее спасибо за любые советы и помощь (:
Ответ №1:
Вы должны использовать потоки с обеих сторон: входной поток и выходной поток. Читатели и авторы предполагают, что содержимое является Unicode, и вносят коррективы в поток байтов. PrintWriter — это, конечно, писатель.