Skip site navigation (1) Skip section navigation (2)

Re: java & endianness [Re: Binary tx format for an array?]

From: Mark Lewis <mark(dot)lewis(at)mir3(dot)com>
To: Marc Herbert <Marc(dot)Herbert(at)continuent(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: java & endianness [Re: Binary tx format for an array?]
Date: 2006-07-10 16:18:30
Message-ID: 1152548310.30994.260.camel@archimedes (view raw or flat)
Thread:
Lists: pgsql-jdbc
On Mon, 2006-07-10 at 11:19 +0200, Marc Herbert wrote:
> Mark Lewis <mark(dot)lewis(at)mir3(dot)com> writes:
> 
> > Java tried so hard to hide endianness from you that it didn't provide
> > any real support for those times when you DO need to be aware of it. 
> 
> Could you give sample cases when you DO need it? I don't think that
> many people write hardware drivers in Java ;-)

Any time you're working with network protocols, as was the case with
this example here.  Try to send a 32-bit integer over the network, for
the other end to receive it correctly, it needs to be in the byte-order
the client expects.

> I don't think network communication qualifies either, see below.
> 
> 
> > So the "convention" looks kind of like this (snipped from the PG JDBC
> > driver):
> >
> >     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.  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.

> > There finally were endian-aware buffer operations added in JDK 1.4, 
> 
> Could you detail which ones? Thanks in advance.

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

-- Mark

In response to

Responses

pgsql-jdbc by date

Next:From: Marc HerbertDate: 2006-07-10 17:54:20
Subject: Re: java & endianness [Re: Binary tx format for an array?]
Previous:From: Charles CuriDate: 2006-07-10 13:35:28
Subject: Encod again

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group