Re: java & endianness [Re: Binary tx format for an array?]
От | Mark Lewis |
---|---|
Тема | Re: java & endianness [Re: Binary tx format for an array?] |
Дата | |
Msg-id | 1152548310.30994.260.camel@archimedes обсуждение исходный текст |
Ответ на | java & endianness [Re: Binary tx format for an array?] (Marc Herbert <Marc.Herbert@continuent.com>) |
Список | pgsql-jdbc |
On Mon, 2006-07-10 at 11:19 +0200, Marc Herbert wrote: > Mark Lewis <mark.lewis@mir3.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
В списке pgsql-jdbc по дате отправления: