2016-04-20 4 views
0

Рассмотрите случай, когда сервер B отправляет HTTP-запрос серверу A (который является сервером шифрования) и получает выходной поток (который зашифрован). Чтобы сервер B мог писать с помощью этого зашифрованного потока.Возможно ли отправить выводный поток в ответ на запрос HTTP?

Теперь этот зашифрованы выходной поток будет открыт в сервер A и закрылся на сервер B.

  1. Можно ли отправить выходной поток в ответ HTTP?

  2. Правильно ли вы отправляете выходной поток в ответ? Или существуют ли какие-либо соглашения, такие как выходной поток, должны быть закрыты на том же сервере (или в том же приложении), где он создан?

+0

Вы не "отправить" выходной поток. Сервер записывает байты в свой поток ответа HTTP-ответа, так что клиент может принимать байты во входном потоке своего соединения. Выходной поток похож на клавиатуру: вы используете ее для записи вещей. InputStream похож на экран: вы используете его для чтения вещей. Но вы не посылаете клавиатуру кому-то, чтобы что-то сказать. Вы вводите его на клавиатуре. –

+0

Большое спасибо JB Nizet :) Хотя мы имеем переменные (разных типов данных) для чтения/записи данных в памяти, то почему мы идем для потоков? Пожалуйста, помогите мне это знать. – lsof

+0

Поток редко используется для записи вещей в память. В основном он используется для записи вещей на диск или в сеть. Если у вас есть два сервера, даже на одном компьютере, они не используют одну и ту же память. Переменная, хранящаяся в одном процессе, недоступна из другого процесса. Поэтому вам нужно общаться между ними, отправляя сообщения по сети. Чтобы продолжить метафоры: вы можете написать заметку о почте для своей жены, которая живет в вашем доме. Но чтобы что-то мне рассказать, вам нужно отправлять сообщения по сети. –

ответ

0

Да, это возможно. Вот как работает загрузка файла.

Сначала вам нужно установить Content-Type, который вы собираетесь предоставить. Если это простой двоичный файл, установите его как application/octet-stream. После этого получите outputStream ответа и дампируйте содержимое файла в нем.

Как ниже

response.setContentType("application/octet-stream"); 
response.setContentLength(fileSizeInBytes);//new File('myfile').length(), optional step 
response.getOutputStream().write(fileBytes);//do it in chunks 

#edit

Потоки концы каналов передачи данных. Как и HTTP-адрес, это конечная точка ресурса сервера.

В случае потока наша программа не обязательно должна знать, где находится фактический ресурс. Мне просто нужно знать, как взаимодействовать с потоком.

Так что в случае HttpServletResponse поток, данные лежат на вашем сервере. Клиентский браузер (или любой другой клиент) устанавливает соединение с вашим сервером. Когда мы вызываем методы в потоке, такие как чтение/запись, данные по этому соединению отправляются или принимаются. Эти вызовы в случае HttpServletResponse приводят к передаче пакетов HTTP по TCP-соединению.

Для получения дополнительной информации о Java Stream (или любом другом языке с аналогичной концепцией) проверьте здесь.

https://docs.oracle.com/javase/tutorial/essential/io/streams.html

+0

Большое спасибо 11thdimension. Я не мог визуализировать, как работает outputStream. Я понимаю, что он похож на переменную-указатель в C, указывающую на адрес, и будет записывать данные в него, если мы вызываем метод .write(). Пожалуйста, исправьте меня, если я ошибаюсь. И, пожалуйста, помогите мне получить четкое представление о потоках. – lsof

+0

Обновлен мой ответ, посмотрите. – 11thdimension

+0

Еще раз спасибо 11thimensionion :) Я все еще люблю прояснить их. 1. У нас есть строки - мы читаем, получаем данные из строки и сохраняем данные в строке, как и другие типы данных для чтения/записи данных в памяти Тогда почему мы приходят для потоков? Что необходимо для создания потоков? Пожалуйста, помогите мне с этим. – lsof

 Смежные вопросы

  • Нет связанных вопросов^_^