22 messages in org.postgresql.pgsql-jdbcRe: java & endianness [Re: Binary tx ...
FromSent OnAttachments
Michael GuyverJun 21, 2006 10:26 am 
Dave CramerJun 21, 2006 12:55 pm 
Mark LewisJun 21, 2006 1:31 pm 
Tom LaneJun 21, 2006 3:40 pm 
Michael GuyverJun 22, 2006 1:16 am 
Tom LaneJun 22, 2006 9:54 am 
Mark LewisJun 22, 2006 12:15 pm 
Michael GuyverJun 23, 2006 1:22 am 
Dave CramerJun 23, 2006 4:43 am 
Markus SchaberJun 23, 2006 4:59 am 
Michael GuyverJun 23, 2006 5:46 am 
Dave CramerJun 23, 2006 5:56 am 
Dave CramerJun 23, 2006 6:16 am 
Tom LaneJun 23, 2006 9:18 am 
Mark LewisJun 23, 2006 1:31 pm 
Dave CramerJun 23, 2006 1:39 pm 
Kris JurkaJun 23, 2006 1:46 pm 
Mark LewisJun 23, 2006 1:59 pm 
Marc HerbertJul 10, 2006 2:19 am 
Mark LewisJul 10, 2006 9:18 am 
Marc HerbertJul 10, 2006 10:53 am 
Mark LewisJul 10, 2006 11:59 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: java & endianness [Re: Binary tx format for an array?]Actions...
From:Marc Herbert (Marc@continuent.com)
Date:Jul 10, 2006 10:53:57 am
List:org.postgresql.pgsql-jdbc

Mark Lewis <mark@mir3.com> writes:

public void SendInteger4(int val) throws IOException { SendChar((val >> 24)&255); SendChar((val >> 16)&255); SendChar((val >> 8)&255); SendChar(val&255); }

This code is like copied/pasted from the JDK:

* @since JDK1.0 DataOutputStream#writeInt()

Any reason for duplicating it in the driver?

Well, in the general case you can only use DataOutputStream's writeInt() method if everything is in big-endian byte order, which is true in this case but not universally so.

My point is that it IS universally true in the Java universe AND in the networking universe. There simply cannot be two opposed networking universes... that would mean we'd have two Internets for instance?

So I think the whole point of Java is that everything is big-endian, so you do not need to know about endianness anymore. IMHO this is a success.

Here it IS big-endian, so the choice is between duplicating one method a few lines long, or wrapping the main OutputStream in an extra DataOutputStream which would only be used when writing big-endian integers. Not sure if one solution is better than the other.

OK you can bypass/copy-paste some JDK code for performance reasons. But then you can not honestly complain Java does a poor job of hiding endianness when you fiddled with the machine internals instead of safely staying outside.

Moreover you don't really need to think about endianness when simply copy/pasting this code.

It's in the java.nio stuff, look at the javadoc for ByteBuffer.order() for a starting point.

Interesting. Looks like you need this only when dealing with badly-behaved applications that do not use the network order, right? Should be very seldom, don't you think?

Thanks for answering.