2013-08-31 53 views
3

我想在java中使用flex.messaging.io.amf.Amf3Input反序列化amf二进制格式。但没有找到反序列化的流程。可以通过提供步骤或代码片段来帮助我吗? 我试图用波纹管代码.....但readObject()返回空......请帮助。在java中使用amf3input反序列化amf二进制格式

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

我能够让我的工作。这里是一个AmfDeserializer:

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"); 
    } 
} 
相关问题