@@ -439,6 +439,101 @@ public void testClear() throws IOException {
439439 }
440440 }
441441
442+ @ Test
443+ public void testClearRecycle () throws IOException {
444+ byte [] data = new byte [8 ];
445+ data [0 ] = (byte )1 ;
446+ data [2 ] = (byte )1 ;
447+ data [4 ] = (byte )1 ;
448+
449+ LinkedBufferInput b = new LinkedBufferInput (16 );
450+
451+ b .feed (data );
452+ assertEquals (1 , b .link .size ());
453+ assertEquals (8 , b .writable );
454+ b .clear ();
455+ assertEquals (1 , b .link .size ());
456+ assertEquals (16 , b .writable );
457+
458+ b .feed (data );
459+ b .feed (data );
460+ assertEquals (1 , b .link .size ());
461+ assertEquals (0 , b .writable );
462+ b .clear ();
463+ assertEquals (1 , b .link .size ());
464+ assertEquals (16 , b .writable );
465+ }
466+
467+ @ Test
468+ public void testCopyReferencedBuffer () throws IOException {
469+ byte [] data = new byte [16 ];
470+ data [0 ] = (byte )4 ;
471+ data [3 ] = (byte )5 ;
472+ data [6 ] = (byte )6 ;
473+ data [10 ] = (byte )7 ;
474+
475+ LinkedBufferInput b = new LinkedBufferInput (32 );
476+ int n ;
477+ byte [] buf = new byte [16 ];
478+
479+ b .feed (data , true );
480+ b .feed (data , true );
481+ b .feed (data , true );
482+ assertEquals (3 , b .link .size ());
483+ assertEquals (-1 , b .writable );
484+
485+ b .copyReferencedBuffer ();
486+ assertEquals (1 , b .link .size ());
487+ assertEquals (0 , b .writable );
488+
489+ n = b .read (buf , 0 , 16 );
490+ assertEquals (n , 16 );
491+ assertArrayEquals (data , buf );
492+
493+ n = b .read (buf , 0 , 16 );
494+ assertEquals (n , 16 );
495+ assertArrayEquals (data , buf );
496+
497+ n = b .read (buf , 0 , 16 );
498+ assertEquals (n , 16 );
499+ assertArrayEquals (data , buf );
500+ }
501+
502+ @ Test
503+ public void testCopyReferencedBufferOptimized () throws IOException {
504+ byte [] data = new byte [16 ];
505+ data [0 ] = (byte )4 ;
506+ data [3 ] = (byte )5 ;
507+ data [6 ] = (byte )6 ;
508+ data [10 ] = (byte )7 ;
509+
510+ LinkedBufferInput b = new LinkedBufferInput (32 );
511+ int n ;
512+ byte [] buf = new byte [16 ];
513+
514+ b .feed (data , true );
515+ b .feed (data , true );
516+ b .feed (data ); // buffer allocated
517+ assertEquals (3 , b .link .size ());
518+ assertEquals (16 , b .writable );
519+
520+ b .copyReferencedBuffer ();
521+ assertEquals (2 , b .link .size ());
522+ assertEquals (16 , b .writable );
523+
524+ n = b .read (buf , 0 , 16 );
525+ assertEquals (n , 16 );
526+ assertArrayEquals (data , buf );
527+
528+ n = b .read (buf , 0 , 16 );
529+ assertEquals (n , 16 );
530+ assertArrayEquals (data , buf );
531+
532+ n = b .read (buf , 0 , 16 );
533+ assertEquals (n , 16 );
534+ assertArrayEquals (data , buf );
535+ }
536+
442537 @ Test
443538 public void testBufferRecycleByteArray () throws IOException {
444539 byte [] data = new byte [16 ];
0 commit comments