On Friday 09 January 2004 09:46, Kris Jurka wrote: > On Wed, 7 Jan 2004, Martin Holz wrote: > > Hello, > > > > org.postgresql.jdbc1.AbstractJdbc1Statement.setBinaryStream() > > in postgresql 7.4.1 wrongly assumes, that > > java.io.InputStream.read(byte[] b,int offset,int len ) > > will always read len bytes. InputStream only guarantees to > > return at least 1 byte per call. The attached patch solves the > > bug. > > Yes, it can even return 0 bytes if it feels like it. > > > Btw. setBinaryStream() should really throw an SQLException, if > > in can not read as many bytes as expected from the InputStream. > > Otherwise the application might silently loss data. > > The odd thing about the javadocs is that they say "The data will be > read from the stream as needed until end-of-file is reached." The > length parameter's comment is "the number of bytes in the stream."
You seem to use a other javadoc than me. http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStream.html#read(byte[],%20int,%20int) is pretty clear. > This is strange because it seems to imply that the length argument > is just for informational purposes and should not be used to limit > the amount of data actually read from the stream. At least 1 byte will be read unless len == 0. No more than len bytes will be read. Within this limit read is free to return as many bytes as it considers efficient. Martin -- Martin Holz <[EMAIL PROTECTED]> Softwareentwicklung / Vernetztes Studium - Chemie FIZ CHEMIE Berlin Franklin Str. 11 D-10587 Berlin ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster