It is possible to work with packet's decoded state directly. You can use the method
JPacket.getState() to retrieve direct access to packet's state. It is a separate object, that is peered to a native state structure. This structure maintains information about each header, its length and offset into the packet data buffer. It also maintains a bit based integer map of the headers that are present within the packet.
JPacket.State class provides native accessors for accessing members of the native
struct packet_state_t C structure. The information in the structure is surprisingly simple. It only maintains the start and the length of the header within the packet buffer. That information is used to peer specific header instances directly with the packet's buffer memory where the header is said reside. Then its upto the header, a java class, to actually read the information from that native memory using
This is an advanced topic, that is very implementation specific, therefore it is best not to rely on this part of the API.