Различия DataInputStream, GZIPInputStream и InputStream

Я знаю это,

GZIPInputStream extends InflaterInputStream extends FilterInputStream extends InputStream а также

DataInputStream extends FilterInputStream extends InputStream 

Я хочу знать разницу между следующим

InputStream mIstr1 = new DataInputStream(new GZIPInputStream(mUConn.getInputStream()));
InputStream mIstr2 = new GZIPInputStream(mUConn.getInputStream());
InputStream mIstr3 = new DataInputStream(mUConn.getInputStream());
InputStream mIstr4 = mUConn.getInputStream();

mUConn это HttpURLConnection,

мои опасения

  • В каких случаях мы должны получить InputStream как GZIPInputStream в DataInputStream?
  • В каких случаях мы должны получить InputStream как GZIPInputStream?
  • В каких случаях мы должны получить InputStream как DataInputStream?

1 ответ

Решение

Это действительно разные классы, и документация должна дать вам хорошее описание цели каждого класса.

Вы хотите использовать методы в DataInputStream что включает в себя чтение примитивных типов и строк из потока хорошо документированным способом? Если так, используйте DataInputStream обернуть оригинальный поток; иначе нет.

Содержит ли ваш исходный поток данные, сжатые с помощью алгоритма gzip? Если так, используйте GZIPInputStream; иначе нет. Я не ожидал бы входной поток от HttpURLConnection представлять сжатые gzip данные; Я надеюсь, что библиотеки HTTP будут выполнять соответствующую инфляцию, основанную на заголовках, но возможно, что они здесь "тупые". (Если это так, вы можете найти альтернативные библиотеки.)

Другие вопросы по тегам