2016-07-11 12 views
-2

아마도 Writable을 구현하면 직렬화 가능 객체가 표시되기 때문일 수 있습니다. DataInputDataOutput바이트 스트림과 직접적인 관련이 있습니다. 그러나 값을 직접 읽고 기본 유형으로 저장하는 데 아무런 해가 없습니다.DataInput 및 DataOutput를 직접 사용할 수있는 경우 Writable을 사용하는 이유는 무엇입니까?

즉, readFields()write() 메서드의 사용은 쓸모없는 것처럼 보이며 모듈성의 관점에서만 사용할 수 있습니다. 인스턴스 변수에 대한 DataInputDataOutput 클래스의 객체를 만들고 입력을 직접 입력하면 (스캐너 유틸리티 클래스와 같은 DataInputDataOutput 사용) 매우 간단합니다. 그것들을위한 인터페이스를 만들고 미리 정의 된 상자 클래스 나 우리 고유의 사용자 정의 클래스에있는 명백한 메서드를 구현하는 것은 내가 볼 수있는 한 구문 론적 설탕처럼 보입니다.

볼 수있는 것이 있으면 내가 보도록 도와주세요.

업데이트 : DataInputDataOutput 클래스는 직렬화 된 객체를 생성합니다! : O

+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 & 소스 = 웨브 CD = 1 CAD = RJA 및 uact = 8 VED = 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 및/deserialze DataInput 직렬화 가장 기본적인 유형, 즉 프리미티브 타입 아닌 사용자 또는 복합 오브젝트.

이 왜 Writable을 구현하는 것입니다, 차례로 그 방법 readFields(DataInput in)write(DataOutput out)에, 우리는 우리 자신의 클래스의 멤버/인스턴스 변수를 직렬화하고 자신의 입력 또는 출력을 통과 할 수 있습니다. 그리고 Writables는 특정 클래스 용으로 작성되었으므로 크기가 작고 작은 (and not 5-bytes long)이므로 클래스 유형에 대한 메타 데이터를 저장할 필요가 없으며 분산 네트워크에서 스트리밍을 쉽게 수행 할 수 있으므로 더 높은 성능을 제공합니다 (Java Serializable).