Re: Reading a C struct in java
Mark wrote:
On Tue, 29 Sep 2009 11:33:29 +0200, Lothar Kimmeringer
<news200709@kimmeringer.de> wrote:
Mark wrote:
I am writing an app in java which reads data from a socket from a C
language program. The data is encoded as a C struct of char arrays
something like this;
typedef struct {
char type[1];
char length[6];
char acknowledge[1];
char duplicate[1];
...
} type_t;
How can I decode a structure like this in Java without using JNI (a
requirement)?
Do you need a parser creating Java-classes or do you simply
want to read in the data?
I don't want a parser. The exact structure is known at compile time.
If the latter you have to find out
the endianess of the system if you have to read in data consisting
of more than one byte (e.g. int) and how many bytes an int
has (varies in dependence of the processor architecture).
Endian-ness is not an issue. All the fields are char arrays.
The rest can be done with simply reading in from the stream
I don't have access to the stream. The data arrives to my code in
already in a byte array.
I guess I want to know if there is an easy way to map the C structure
to a java class or whether I will have to dissect the byte array
completely manually.
What you "have" to do is decide what kind of a Java object (or
set of objects) you want to create from this bag of bytes. Then do
whatever's needed to create the object(s). Stop thinking about
representation, and start thinking about information, about values.
Keep in mind that Java has nothing precisely analogous to a C
struct. Also, keep in mind that Java's `char' is not C's `char',
unless you happen to be using one of those rare C implementations
that uses a 16-bit `char' with Unicode encoding. Finally, keep
in mind that Java's String is not C's string (I can't tell from
your description whether any of those C arrays are supposed to
hold C strings, but if they do, they're not Java Strings).
--
Eric.Sosman@sun.com