2017-11-29 1 views
0

누군가가 BytesWritable을 byte []로 변환하도록 도와 줄 수 있습니까? 값이 BytesWritable 인 value.getBytes()를 사용하면 추가 바이트를 얻습니다.Hadoop : BytesWritable을 byte []로 변환합니다.

감사

+0

'getBytes'로 얻는 에러는 정확히 무엇입니까? 올바른 답변 https://hadoop.apache.org/docs/stable/api/index.html?org/apache/hadoop/io/BytesWritable.html –

답변

1

당신이 가진 문제는 BytesWritable 바이트 배열과 길이가 포함되어 있다는 점이다. 이들을 조합하여 사용해야합니다.

@Test 
public void testBytesWritable() { 

    BytesWritable bw = new BytesWritable(); 
    Text t1 = new Text("ABCD"); 
    bw.set(t1.getBytes(), 0, t1.getLength()); 
    System.out.println("Size: " + bw.getBytes().length); 

    Text t2 = new Text("A"); 
    bw.set(t2.getBytes(), 0, t2.getLength()); 
    System.out.println("Size: " + bw.getBytes().length); 

    byte[] newArray = Arrays.copyOf(bw.getBytes(), bw.getLength()); 
    System.out.println("Size: " + newArray.length); 
} 

이 출력합니다 : 여기에 내가 일어나는 뭐죠을 보여 쓴 작은 단위 테스트입니다

Size: 6 
Size: 6 
Size: 1 

그래서 당신하여 BytesWritable가 길게 설정으로, 두 번 처음 설정되어있는 것을 볼 수 있습니다 바이트 수 바이트 배열의 길이를 출력하면 내부 바이트 배열의 길이가 줄어들지 않는다는 것을 알 수 있습니다. 따라서 getLength() 메서드를 사용하여 유효한 BytesWritable의 바이트 수를 확인해야합니다. 단위 테스트에서는 올바른 바이트를 얻기 위해 Arrays.copyOf()을 사용했습니다. 바이트 배열과 길이가 필요하기 때문입니다.

+0

설명 주셔서 감사합니다. – Aavik

관련 문제