Could you give us the type and the full stack trace of the exception? It
still might help us to fix a potential problem.
Trustin
On 6/15/06, Arsalan Zaidi <[EMAIL PROTECTED]> wrote:
OK, I solved this :-)
There's a length field before the string, total 4 bytes long. So if I do
something like this:
in.position(4);
String temp = in.getString(CharsetUtil.getDefaultCharset().newDecoder());
and print 'temp', it works. The funny bit is, if I say:
String temp = in.getPrefixedString(4, CharsetUtil.getDefaultCharset
().newDecoder());
I get exceptions :-)
Anyway, I'll use what works for now
--Arsalan
On 6/14/06, Niklas Therning <[EMAIL PROTECTED]> wrote:
>
> Arsalan Zaidi wrote:
> > Hmmm. I thought of that. I tried to skip it by setting in.position(2)
> and
> > then in.position(1). But I still get an exception.
>
> What exception?
>
> >
> > The funny thing is that the client is not sending a NULL anyway. It's
a
> > simple String of XML text.
>
> Are you using the same char encoding on the client and server?
>
> >
> > Is there a better way to convert from a byte buffer to a string? Some
> > better
> > built in method maybe?
>
> Not that I'm aware of. There's also the getPrefixedString() method in
> ByteBuffer which can be used if you prefix every string sent with the
> length of the string.
>
> >
> > Regards.
> >
> > --Arsalan
> >
> > On 6/14/06, Niklas Therning <[EMAIL PROTECTED]> wrote:
> >>
> >> Arsalan Zaidi wrote:
> >> > Hi.
> >> >
> >> > The client is sending me a bunch of plain text data. All I want to
> >> do at
> >> > this stage is print it out.
> >> >
> >> > In Decoder.java, I have:
> >> >
> >> > public void decode(IoSession session, ByteBuffer in,
> >> ProtocolDecoderOutput
> >> > out) throws Exception
> >> > {
> >> > log.entering(this.getClass().getName(), "decode", new
Object[]
> >> > {session, in, out});
> >> > log.info("in.limit = "+in.limit());
> >> > log.info("in.position = "+in.position());
> >> > log.info("in.capacity = "+in.capacity());
> >> > log.info("in.toString = "+in.toString());
> >> >
> >> > String temp = in.getString(CharsetUtil.getDefaultCharset
> >> ().newDecoder());
> >> > log.info("original temp = "+temp.length());
> >> > }
> >> >
> >> > Which prints out the following. Notice that even though I'm getting
> >> data, I
> >> > can't print it out. The String temp is always empty. What am I
doing
> >> wrong?
> >> > ...
> >>
> >> getString(...) reads a NUL terminated string. From the log output it
> >> seems like the first byte in the buffer is 00, aka NUL. Hence you'll
> get
> >> an empty string from getString(...).
> >>
> >> HTH
> >> --
> >> Niklas Therning
> >> Software Architect
> >> www.spamdrain.net
> >>
> >
>
>
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP key fingerprints:
* E167 E6AF E73A CBCE EE41 4A29 544D DE48 FE95 4E7E
* B693 628E 6047 4F8F CFA4 455E 1C62 A7DC 0255 ECA6