Hi Lukas,

Did you measure, or at least observe the performance improvement this
change made?

The changes look fine to me, although there are comments next to code
for reading/writing 1 byte at a time (the non-buffered part), so Doug
obviously wanted it that way, and I don't know why...

Otis


--- Lukas Zapletal <[EMAIL PROTECTED]> wrote:

> And here comes the fixes:
> 
> OutputStream:
> 
>       /**
>        * Writes an array of bytes.
>        * 
>        * @param b
>        *            the bytes to write
>        * @param length
>        *            the number of bytes to write
>        * @see InputStream#readBytes(byte[],int,int)
>        */
>       public final void writeBytes(byte[] b, int length) 
>               throws IOException { 
> 
> //            for (int i = 0; i < length; i++) writeByte(b[i]);
> 
>               if (bufferPosition > 0) // flush buffer
>                       flush();
> 
>               if (length < BUFFER_SIZE) {
>                               flushBuffer(b, length);
>               } else {
>                       int pos = 0;
>                       int size;
>                       while (pos < length) {
>                               if (length - pos < BUFFER_SIZE) {
>                                       size = length - pos;
>                               } else {
>                                       size = BUFFER_SIZE;
>                               }
>                               System.arraycopy(b, pos, 
>                                       buffer, 0, size); pos += size;
>                               flushBuffer(buffer, size);
>                               bufferStart += size;
>                       }
>               }
>       }
> 
> InputStream:
> 
>       public final void readBytes(byte[] b, int offset, int len)
>                       throws IOException {
> //            if (len < BUFFER_SIZE) { // not required
> //                    for (int i = 0; i < len; i++)
> //                            // read byte-by-byte
> //                            b[i + offset] = (byte) readByte();
> //            } else { // read all-at-once
>                       long start = getFilePointer();
>                       seekInternal(start);
>                       readInternal(b, offset, len);
> 
>                       bufferStart = start + len;
>                       bufferPosition = 0; 
>                       bufferLength = 0;
>  //           }
>       }
> 
> You can try to test it in the SVN version in BufferedIndexInput and
> BufferedIndexOutput, there are these methods too.
> 
> There is significant time improvement for writing and slight for
> reading. I also recommend set the buffer to 8 or 16 kilobytes.
> 
> -- 
> S pozdravem / Best regards
> Lukas Zapletal
> sefredaktor / editor-in-chief
> LinuxEXPRES - opravdovy linuxovy magazin
> www.LinuxEXPRES.cz
> tel.:+420 777 003 843
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to