http://wenku.baidu.com/link?url=bptGA6PJv6m9nkgWgGrVqmeFUX1d1odmSaOtojBorUANWyXuLDsdlP1rRKpiQaljNVURQYLk5CEOyucTAlg8QrxH4K5xRcJx8RYijzn_IbS你看一下这个就了解了。分析一下swf文件的文件头信息即可。文件头中有帧尺寸应该就是大小。
解决方案 »
- Java线程的小问题
- a=b, b=c, a=c??
- j2ee学什么
- jfreechart 在画股票行情图时,怎样将中午休息时间去掉
- 帮忙改错???不明白呀!!!
- 现在java开发中流行通过什么方式实现对数据库操作?就好像Visual Stadio通过ADO访问数据库。
- 简单调查一下,请问大家写程序都是在多少岁开始学的啊?
- 各位在java版的朋友们我在这里做一个关于年龄的调查
- 请问:如果用java做一个通讯小软件,用面向连接的socket还是用数据报传输的socket好?
- java发布时提交给客户的是一个个jar么?
- jmc未检测到本地的jvm.....
- spring在tomcat启动可以注入DAO,但是在程序运行中的值为空!刚学,请高手指导!
http://www.iteye.com/topic/348529
测试可用!
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)
不明白你的SWF有多大?
http://www.iteye.com/topic/348529
这个源码竟然不能满足你的要求?
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)); }
}