question: protected void init ( InputStream in , String defaultEncoding ) throws IOException { PushbackInputStream tempIn = new PushbackInputStream ( in , BOM_SIZE ) ; byte bom [ ] = new byte [ BOM_SIZE ] ; int n , unread ; n = tempIn . read ( bom , 0 , bom . length ) ; if ( ( bom [ 0 ] == ( byte ) 0x00 ) && ( bom [ 1 ] == ( byte ) 0x00 ) && ( bom [ 2 ] == ( byte ) 0xFE ) && ( bom [ 3 ] == ( byte ) 0xFF ) ) { encoding = "UTF-32BE" ; unread = n - 4 ; } else if ( n == BOM_SIZE && ( bom [ 0 ] == ( byte ) 0xFF ) && ( bom [ 1 ] == ( byte ) 0xFE ) && ( bom [ 2 ] == ( byte ) 0x00 ) && ( bom [ 3 ] == ( byte ) 0x00 ) ) { encoding = "UTF-32LE" ; unread = n - 4 ; } else if ( ( bom [ 0 ] == ( byte ) 0xEF ) && ( bom [ 1 ] == ( byte ) 0xBB ) && ( bom [ 2 ] == ( byte ) 0xBF ) ) { encoding = "UTF-8" ; unread = n - 3 ; } else if ( ( bom [ 0 ] == ( byte ) 0xFE ) && ( bom [ 1 ] == ( byte ) 0xFF ) ) { encoding = "UTF-16BE" ; unread = n - 2 ; } else if ( ( bom [ 0 ] == ( byte ) 0xFF ) && ( bom [ 1 ] == ( byte ) 0xFE ) ) { encoding = "UTF-16LE" ; unread = n - 2 ; } else { encoding = defaultEncoding ; unread = n ; } if ( unread > 0 ) tempIn . unread ( bom , ( n - unread ) , unread ) ; else if ( unread < - 1 ) tempIn . unread ( bom , 0 , 0 ) ; if ( encoding == null ) { internalIn = new InputStreamReader ( tempIn ) ; encoding = internalIn . getEncoding ( ) ; } else { internalIn = new InputStreamReader ( tempIn , encoding ) ; } }
target:  Read-ahead four bytes and check for BOM marks. Extra bytes are unread back to the stream, only BOM bytes are skipped.