1 package org.jscsi.target.scsi; 2 3 4 import java.nio.ByteBuffer; 5 6 7 /** 8 * This interface specifies methods for serializing an object. The serialized object can be inserted into an existing 9 * {@link ByteBuffer} of sufficient size at an arbitrary position. 10 * <p> 11 * This interface is implemented by the classes representing sense and response data (as well as components thereof) to 12 * SCSI requests, which are returned to the iSCSI initiator in the SCSI Response PDU's data segment. 13 * <p> 14 * Additional care must be taken when implementing objects consisting of several {@link ISerializable} components, not 15 * to overwrite the fields of another component. The advantage of this strategy, however, will be higher speed, since 16 * unnecessary buffer-to-buffer copying is avoided. 17 * 18 * @author Andreas Ergenzinger 19 */ 20 public interface ISerializable { 21 22 /** 23 * Inserts a serialized representation of the object into the specified {@link ByteBuffer}. The serialized object 24 * will occupy the byte positions from <i>index</i> to <i>index + {@link #size()} - 1</i>. 25 * 26 * @param byteBuffer where to insert the serialized object representation 27 * @param index the position of the first byte of the serialized object in the {@link ByteBuffer} 28 */ 29 public void serialize (ByteBuffer byteBuffer, int index); 30 31 /** 32 * Returns the size in bytes of the object's serialized representation. 33 * 34 * @return the size in bytes of the object's serialized representation 35 */ 36 public int size (); 37 38 }