#java #objectoutputstream
#java #objectoutputstream
Вопрос:
Я нашел фрагмент кода Java, который, как утверждается, возвращает объект с помощью ObjectOutputStream
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject(process);
oos.flush();
oos.close();
ответом является объект HttpServletResponse. Я хотел бы знать, как работает этот сегмент кода и как его протестировать?
Ответ №1:
Ниже приведен простой пример, который показывает, как прочитать сериализованный объект через HTTP.
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.ObjectInputStream;
/**
* This is a simple example to read an object.
*
* This is not production ready code ;-)
*/
public class Sample {
public static void main(final String [] pArgs) throws Exception {
// Change SERVER:PORT/PATH to match your application.
final URL url = new URL("http://SERVER:PORT/PATH");
final HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(10000);
conn.connect();
final ObjectInputStream is
= new ObjectInputStream(conn.getInputStream());
final Object obj = is.readObject();
if (obj instanceof String) System.out.println((String)obj);
else // Convert to object and do whatever.
is.close();
conn.disconnect();
}
}
Ответ №2:
Он сериализует объект в выходной поток сервлета (например, данные, которые будут переданы в HTTP-ответе), используя протокол двоичной сериализации Java по умолчанию (который я лично несколько неохотно использую). Для получения подробной информации смотрите спецификацию сериализации объектов.
Что касается способа его тестирования — это зависит от уровня тестирования, который вы хотите использовать. Вы могли бы использовать поддельную библиотеку HTTP-сервлетов, получить ответ, а затем попытаться прочитать его снова с помощью ObjectInputStream
, или вы могли бы запустить фактический контейнер сервлета, выполнить HTTP-запрос, а затем попытаться десериализовать ответ.