2016-07-11 7 views
-2

Возможно, потому, что реализация Writable предоставит нам сериализуемый объект. Я знаю, что DataInput и DataOutput напрямую связаны с байтовыми потоками, но я не вижу вреда в прямом чтении значений от них и хранении его в примитивных типах.Зачем использовать Writable, когда мы можем напрямую использовать DataInput и DataOutput?

Это говорит о том, что использование методов readFields() и write() представляется бесполезным и может использоваться только с точки зрения модульности. Создание объектов для DataInput и DataOutput классов для переменных экземпляра и непосредственного ввода входов (с использованием DataInput и 10, как класса утилиты сканера) кажется довольно простым. Насколько я вижу, создание интерфейса для них и реализация этих очевидных методов (будь то в заранее определенных классах ячеек или наших собственных пользовательских классах) выглядят как синтаксический сахар.

Помогите мне разобраться, если есть что-то, что можно увидеть.

ОБНОВЛЕНИЕ: DataInput и DataOutput классы производят сериализованные объекты! : О

+0

'Writable' не создает сериализуемые объекты, а также не' DataInput' или 'DataOutput'. Неясно, о чем вы говорите, не говоря уже о том, что вы просите. – EJP

+0

Возможный дубликат [В чем причина Writable ...] (http://stackoverflow.com/q/17203661/207421). – EJP

+0

@EJP Все они делают. [Здесь] (https://acadgild.com/blog/writable-and-writablecomparable-in-hadoop/) и [здесь] (https://www.google.co.in/url?sa=t&rct=j&q= & ESRC = s & источник = веб & кд = 1 & CAD = RJA & uact = 8 & вед = 0ahUKEwiRs4aNkuvNAhUJPxoKHTWgDCEQFggdMAA & URL = HTTPS% 3A% 2F% 2Fhadoop.apache.org% 2Fdocs% 2Fr2.6.1% 2Fapi% 2Forg% 2Fapache% 2Fhadoop% 2Fio% 2FWritable.html & USG = AFQjCNEz5Mh9TeOMqXd8AX74QxlfFMzCzw & Sig2 = 35nxbPRITVf6lfzivGUSjw) , И вопрос вашего второго комментария говорит о чем-то другом. Не просто читать название! –

ответ

0

DataOutput и DataInput сериализации/deserialze только самые основные типы, то есть, примитивные типы и не заказные или сложных объектов.

Поэтому путем внедрения Writable, и в свою очередь, его метод readFields(DataInput in) и write(DataOutput out), мы можем сериализации члены/переменные экземпляра нашего класса и пересекать их входы и выходы. И поскольку Writables написаны для определенных классов, они компактны, малы (and not 5-bytes long) и поэтому обеспечивают более высокую производительность, так как нам не нужно хранить метаданные для типа класса и позволять легко передавать потоки по распределенной сети по сравнению с Java Serializable.

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

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