ByteArrayTransfer provides a platform specific
mechanism for converting a java byte[] to a platform
specific representation of the byte array and vice versa.
ByteArrayTransfer is never used directly but is sub-classed
by transfer agents that convert between data in a java format such as a
String and a platform specific byte array.
If the data you are converting does not map to a
byte[], you should sub-class Transfer directly
and do your own mapping to a platform data type.
The following snippet shows a subclass of ByteArrayTransfer that transfers
data defined by the class MyType.
public class MyType {
public String fileName;
public long fileLength;
public long lastModified;
}
public class MyTypeTransfer extends ByteArrayTransfer {
private static final String MYTYPENAME = "my_type_name";
private static final int MYTYPEID = registerType(MYTYPENAME);
private static MyTypeTransfer _instance = new MyTypeTransfer();
private MyTypeTransfer() {}
public static MyTypeTransfer getInstance () {
return _instance;
}
public void javaToNative (Object object, TransferData transferData) {
if (object == null || !(object instanceof MyType[])) return;
if (isSupportedType(transferData)) {
MyType[] myTypes = (MyType[]) object;
try {
// write data to a byte array and then ask super to convert to pMedium
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream writeOut = new DataOutputStream(out);
for (int i = 0, length = myTypes.length; i < length; i++){
byte[] buffer = myTypes[i].fileName.getBytes();
writeOut.writeInt(buffer.length);
writeOut.write(buffer);
writeOut.writeLong(myTypes[i].fileLength);
writeOut.writeLong(myTypes[i].lastModified);
}
byte[] buffer = out.toByteArray();
writeOut.close();
super.javaToNative(buffer, transferData);
} catch (IOException e) {
}
}
}
public Object nativeToJava(TransferData transferData){
if (isSupportedType(transferData)) {
byte[] buffer = (byte[])super.nativeToJava(transferData);
if (buffer == null) return null;
MyType[] myData = new MyType[0];
try {
ByteArrayInputStream in = new ByteArrayInputStream(buffer);
DataInputStream readIn = new DataInputStream(in);
while(readIn.available() > 20) {
MyType datum = new MyType();
int size = readIn.readInt();
byte[] name = new byte[size];
readIn.read(name);
datum.fileName = new String(name);
datum.fileLength = readIn.readLong();
datum.lastModified = readIn.readLong();
MyType[] newMyData = new MyType[myData.length + 1];
System.arraycopy(myData, 0, newMyData, 0, myData.length);
newMyData[myData.length] = datum;
myData = newMyData;
}
readIn.close();
} catch (IOException ex) {
return null;
}
return myData;
}
return null;
}
protected String[] getTypeNames(){
return new String[]{MYTYPENAME};
}
protected int[] getTypeIds(){
return new int[] {MYTYPEID};
}
}
Transfer
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv boolean | |
| public TransferData[] | getSupportedTypes()
Implements abstract org. |
| public boolean | isSupportedType(TransferData
a platform specific description of a data type; only the data
type fields of the transferData)TransferData object need to be filled inImplements abstract org. TransferData data type can be converted
using this transfer agent, or false otherwise (including if transferData is
null).
|
| protected void | javaToNative(Object
a java object, TransferData byte[] containing the data to be convertedan empty transferData)TransferData object that will
be filled in on return with the platform specific format of the dataImplements abstract org. javaToNative converts a java
byte[] to a platform specific representation.
|
| protected Object | Returns: a javabyte[] containing the converted data if the conversion was
successful; otherwise nullthe platform specific representation of the data to be converted transferData)Implements abstract org. nativeToJava converts a platform specific
representation of a byte array to a java byte[].
|
| ByteArrayTransfer | back to summary |
|---|---|
| public ByteArrayTransfer() | |
| checkByteArray | back to summary |
|---|---|
| pack-priv boolean checkByteArray(Object object) | |
| getSupportedTypes | back to summary |
|---|---|
| public TransferData[] getSupportedTypes() Implements abstract org. Doc from org. Returns a list of the platform specific data types that can be converted using this transfer agent. Only the data type fields of the
| |
| isSupportedType | back to summary |
|---|---|
| public boolean isSupportedType(TransferData transferData) Implements abstract org. Doc from org. Returns true if the
| |
| javaToNative | back to summary |
|---|---|
| protected void javaToNative(Object object, TransferData transferData) Implements abstract org. This implementation of
| |
| nativeToJava | back to summary |
|---|---|
| protected Object nativeToJava(TransferData transferData) Implements abstract org. This implementation of
| |