@@ -802,10 +802,12 @@ static Text.Builder getWritableTextPointer(int refOffset,
802802 return new Text .Builder ();
803803 } else {
804804 Text .Builder builder = initTextPointer (refOffset , segment , defaultSize );
805- // TODO is there a way to do this with bulk methods?
806- for (int i = 0 ; i < builder .size ; ++i ) {
807- builder .buffer .put (builder .offset + i , defaultBuffer .get (defaultOffset * 8 + i ));
808- }
805+
806+ ByteBuffer slice = defaultBuffer .duplicate ();
807+ slice .position (defaultOffset * 8 );
808+ slice .limit (defaultOffset * 8 + defaultSize );
809+ builder .buffer .position (builder .offset );
810+ builder .buffer .put (slice );
809811 return builder ;
810812 }
811813 }
@@ -872,10 +874,12 @@ static Data.Builder getWritableDataPointer(int refOffset,
872874 return new Data .Builder ();
873875 } else {
874876 Data .Builder builder = initDataPointer (refOffset , segment , defaultSize );
875- // TODO is there a way to do this with bulk methods?
876- for (int i = 0 ; i < builder .size ; ++i ) {
877- builder .buffer .put (builder .offset + i , defaultBuffer .get (defaultOffset * 8 + i ));
878- }
877+
878+ ByteBuffer slice = defaultBuffer .duplicate ();
879+ slice .position (defaultOffset * 8 );
880+ slice .limit (defaultOffset * 8 + defaultSize );
881+ builder .buffer .position (builder .offset );
882+ builder .buffer .put (slice );
879883 return builder ;
880884 }
881885 }
0 commit comments