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
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 |