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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-jdbc by date

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