http://wenku.baidu.com/link?url=bptGA6PJv6m9nkgWgGrVqmeFUX1d1odmSaOtojBorUANWyXuLDsdlP1rRKpiQaljNVURQYLk5CEOyucTAlg8QrxH4K5xRcJx8RYijzn_IbS你看一下这个就了解了。分析一下swf文件的文件头信息即可。文件头中有帧尺寸应该就是大小。

解决方案 »

  1.   

    给你源码!
    http://www.iteye.com/topic/348529
    测试可用!
      

  2.   

    就是用的这个,CWS解压的时候出现内存溢出问题
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2786)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
    at nr.util.SWFDecompressor.uncompress(SWFDecompressor.java:93)
    at nr.util.SWFDecompressor.readFile2(SWFDecompressor.java:58)
    at nr.service.LessonsImport.printFlashSize1(LessonsImport.java:552)
    at nr.service.LessonsImport.main(LessonsImport.java:508)
      

  3.   

    考虑到了这方面,不太懂虚拟机内存,照着网上的把配置文件内存写大了,还是存在问题,而且仅仅是一个十几兆的swf文件
      

  4.   


    不明白你的SWF有多大?
    http://www.iteye.com/topic/348529
    这个源码竟然不能满足你的要求?
      

  5.   

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.channels.FileChannel.MapMode;
    import java.util.zip.DataFormatException;
    import java.util.zip.Inflater;public class SWFHeader { public static final int HEADER_BUFFER_SIZE = 512;

    public static SWFHeader load(File file) throws IOException, IllegalAccessException{
    FileChannel fc = new FileInputStream(file).getChannel();
    ByteBuffer buffer = fc.map(MapMode.READ_ONLY, 0L, HEADER_BUFFER_SIZE);
    fc.close();
    SWFHeader header = new SWFHeader();
    header.format = new String(new char[]{(char)buffer.get(),(char)buffer.get(),(char)buffer.get()});
    header.version = buffer.get()&0xFF;
    header.uncompressedFileLength = buffer.get()&0xFF | ((buffer.get()&0xFF)<<8) | ((buffer.get()&0xFF)<<16) | ((buffer.get()&0xFF)<<32);
    if(header.format.charAt(0)=='C'){
    Inflater decompr = new Inflater();
    byte[] array = new byte[HEADER_BUFFER_SIZE-8];
    buffer.get(array);
    decompr.setInput(array);
    try {
    decompr.inflate(array);
    buffer = ByteBuffer.wrap(array);
    } catch (DataFormatException e) {
    throw new IllegalAccessException("Unzip data error : "+e.getMessage());
    }
    }
    if(header.format.charAt(0)=='Z'){
    throw new IllegalAccessException("not support LZMA compressed data");
    }
    header.ctrlCode = buffer.get();
    switch (header.ctrlCode) {
    case 0x50:
    header.height = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    header.width  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    header.height /= 10; 
    header.width /= 10; 
    break;
    case 0x58:
    header.height  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    header.width = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    header.height /= 40; 
    header.width /= 10; 
    break;
    case 0x60:
    header.height  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    header.width  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    header.height /= 10; 
    header.width /= 10; 
    break;
    case 0x68:
    buffer.get();
    header.height = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    buffer.get();
    header.width = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    header.height /= 40; 
    header.width /= 10;
    break;
    case 0x70:
    buffer.get();
    header.height = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    buffer.get();
    header.width  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    header.height /= 10; 
    header.width /= 10; 
    break;
    case 0x78:
    buffer.get();
    header.height  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    buffer.get();
    header.width = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    header.height /= 40; 
    header.width /= 10;
    break;
    case (byte)0x80:
    buffer.get();
    header.height  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    buffer.get();
    header.width  = ( ((buffer.get()&0x0F)<<16) | ((buffer.get()&0xFF)<<8) | (buffer.get() & 0xFF) ) >>> 4;
    header.height /= 10; 
    header.width /= 10; 
    break;
    case (byte)0x88:
    buffer.get();
    header.height = ((buffer.get()&0xFF)<<16) | ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    buffer.get();buffer.get();
    header.width = ((buffer.get()&0xFF)<<8) | buffer.get() & 0xFF ;
    header.height /= 40; 
    header.width /= 10;
    break;
    default:
    break;
    }
    return header;
    }

    private String format;
    private int version;
    private long uncompressedFileLength;
    private byte ctrlCode;
    private int width;
    private int height;

    @Override
    public String toString() {
    final char[] HEXs = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    StringBuilder builder = new StringBuilder();
    builder.append("{format:\"").append(format).append("\",version:").append(version);
    builder.append(",uncompressedFileLength:").append(uncompressedFileLength);
    builder.append(",ctrlCode:0x").append(HEXs[((ctrlCode&0xF0)>>4)]).append(HEXs[(ctrlCode&0x0F)]);
    builder.append(",width:").append(width).append(",height:").append(height).append("}");
    return builder.toString();
    }

    public String getFormat() {
    return format;
    } public int getVersion() {
    return version;
    } public long getUncompressedFileLength() {
    return uncompressedFileLength;
    } public byte getCtrlCode() {
    return ctrlCode;
    } public int getWidth() {
    return width;
    } public int getHeight() {
    return height;
    } public static void main(String[] args) throws IOException, IllegalAccessException {
    File file = new File("D:\\Program Files\\x86\\Tencent\\QQLive\\SysData\\Loading.swf");
    // File file = new File("D:\\tmp\\蚊子的艳遇.swf");
    System.out.println(file.length());
    System.out.println(SWFHeader.load(file)); }
    }