我正在尝试使用java中的flex.messaging.io.amf.Amf3Input反序列化amf二进制格式。但没有找到反序列化的流程。可以通过提供步骤或代码片段来帮助我吗? 我尝试使用波纹管代码.....但是readObject()返回null ......请帮忙。
package amfnew;
import java.net.ServerSocket;
import java.net.Socket;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Input;
import flex.messaging.io.amf.Amf3Output;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class MainAmf {
byte[] read(String aInputFileName){
File file = new File(aInputFileName);
byte[] result = new byte[(int)file.length()];
try {
InputStream input = null;
try {
int totalBytesRead = 0;
input = new BufferedInputStream(new FileInputStream(file));
while(totalBytesRead < result.length){
int bytesRemaining = result.length - totalBytesRead;
int bytesRead = input.read(result, totalBytesRead, bytesRemaining);
if (bytesRead > 0){
totalBytesRead = totalBytesRead + bytesRead;
}
}
}
finally {
input.close();
}
}
catch (FileNotFoundException ex) {
}
catch (IOException ex) {
}
return result;
}
public static void main(String[] args) throws FileNotFoundException {
MainAmf ma= new MainAmf();
byte[] amfBytes;
amfBytes = ma.read("C:\\JavaApp\\AmfNew\\sample.amf");
InputStream bais = new ByteArrayInputStream(amfBytes);
Amf3Input amf3Input = new Amf3Input(SerializationContext.getSerializationContext());
amf3Input.setInputStream(bais);
while(true)
{
try
{
Object obj = amf3Input.readObject();
System.out.println("Reading..");
System.out.println(obj);
if(obj!=null)
{
System.out.println(obj.getClass());
}
}
catch (Exception e)
{
e.printStackTrace();
break;
}
}
}
}
答案 0 :(得分:0)
我能够让我的工作。这是一个Amf解串器:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Input;
import flex.messaging.messages.AcknowledgeMessage;
public class AmfDeserializer
{
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main( String[] args ) throws ClassNotFoundException, IOException
{
if(null == args || args.length != 1)
{
usage();
System.exit( 1 );
}
File f = new File(args[0]);
if(f.exists() && f.canRead())
{
Amf3Input deserializer = new Amf3Input( SerializationContext.getSerializationContext() );
deserializer.setInputStream( new FileInputStream( f ) );
Object o = deserializer.readObject();
if(o instanceof AcknowledgeMessage)
{
AcknowledgeMessage ack = (AcknowledgeMessage)o;
System.out.println(ack.getCorrelationId());
System.out.println(ack.getClientId());
Object myObj = ack.getBody();
System.out.println( ToStringBuilder.reflectionToString( myObj, ToStringStyle.SHORT_PREFIX_STYLE ) );
}
}
}
private static void usage()
{
System.out.println("args: absolute path to the .amf file");
}
}