C#/Java读写Flash源文件
用C#怎么读写Flash源文件(即.fla后缀名的文件)或者Flash播放文件(即.swf文件).
用Java读写也行.
[解决办法]
不能把
都是不同的语言
[解决办法]
sf上有现成的库
[解决办法]
读写这些文件你要干什么用?
[解决办法]
java实现读取flash的swf文件属性 你可以参考一下
flashattrib.java
*/
package picattrib;
import java.io.IOException;
import java.io.FileInputStream;
public class flashattrib {
public flashattrib() {
}
public static void main(String[] args) {
flashattrib flashattrib = new flashattrib();
byte[] bb=null;
image1 im = null;
try {
bb=flashattrib.readFromFile("d:\\aa.swf");
im = flashattrib.getAttrib(bb);
System.out.println(im.getWidth());
System.out.println(im.getHight());
bb=flashattrib.readFromFile("d:\\bb.swf");
im = flashattrib.getAttrib(bb);
System.out.println(im.getWidth());
System.out.println(im.getHight());
bb=flashattrib.readFromFile("d:\\bb.swf");
im = flashattrib.getAttrib(bb);
System.out.println(im.getWidth());
System.out.println(im.getHight());
} catch (IOException ex1) {
System.out.println(ex1);
}
System.out.println(im.getWidth());
System.out.println(im.getHight());
/*
byte aa=0;
for (int i=0;i<260;i++){
System.out.println(flashattrib.getInt(aa++));
}
*/
}
/**
* @param bb byte[]
* @param start int
* @param leng int
* @return int
*/
public int getWeizhi(int start,int weizhi,int leng,byte[] bb){
int aa=0;
if (weizhi==0) {
aa=getInt(bb[start]);
for (int i=1;i<leng;i++){
aa*=256;
int cc=getInt(bb[start+i]);
aa+=cc;
}
}else{
aa=getInt(bb[start])%16;
aa*=256;
aa+=getInt(bb[start+1]);
aa*=16;
aa+=getInt(bb[start+2])/16;
}
return aa;
}
public image1 getAttrib(byte[] bb){
image1 im=new image1();
//flash文件的宽高位置不固定,分为8种,根据第9位的值,来判断当前flash文件的具体宽高位置
//16进制50,58,60,68,70,78,80,88
switch(bb[8]){
case 80: im.setWidth(getWeizhi(9,0,2,bb)/10);
im.setHight(getWeizhi(11,1,2,bb)/10);
break;
case 88: im.setWidth(getWeizhi(9,1,2,bb)/40);
im.setHight(getWeizhi(12,0,2,bb)/10);
break;
case 96: im.setWidth(getWeizhi(9,1,2,bb)/10);
im.setHight(getWeizhi(12,1,2,bb)/10);
break;
case 104: im.setWidth(getWeizhi(10,0,2,bb)/40);
im.setHight(getWeizhi(13,0,2,bb)/10);
break;
case 112: im.setWidth(getWeizhi(10,0,2,bb)/10);
im.setHight(getWeizhi(13,1,2,bb)/10);
break;
case 120: im.setWidth(getWeizhi(10,1,2,bb)/40);
im.setHight(getWeizhi(14,0,2,bb)/10);
break;
case -128: im.setWidth(getWeizhi(10,1,2,bb)/10);
im.setHight(getWeizhi(14,1,2,bb)/10);
break;
case -120: im.setWidth(getWeizhi(10,0,3,bb)/40);
im.setHight(getWeizhi(15,0,2,bb)/10);
break;
}
return im;
}
public int getInt(byte bb){
if (bb>=0) return bb;
else return 256+bb;
}
private static byte[] readFromFile(String fileName) throws IOException
{
PicsModel model = null;
FileInputStream fin = new FileInputStream(fileName);
byte [] buf = new byte[fin.available()];
fin.read(buf);
fin.close();
return buf;
}
}
/*
image1.java
*/
package picattrib;
public class image1 {
private int width;
private int hight;
private int leng;
public image1() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
image1 image1 = new image1();
}
private void jbInit() throws Exception {
}
public void setWidth(int width) {
this.width = width;
}
public void setHight(int hight) {
this.hight = hight;
}
public void setLeng(int leng) {
this.leng = leng;
}
public int getWidth() {
return width;
}
public int getHight() {
return hight;
}
public int getLeng() {
return leng;
}
}
ava的swf处理库
详细看这里 有下栽http://dennis-zane.javaeye.com/blog/153678
本论坛有一个<Java创建SWF文件>下栽
http://download.csdn.net/source/654410
<java版本的flash文件(swf)播放器>下栽
http://www.pudn.com/downloads111/sourcecode/java/detail461105.html
这个来源与 http://www.javaeye.com/news/3764-swfheader-0-10-released
你也自己去看看 swfheader是一个处理swf文件的工具脚本,可用于读取swf文件头信息、压缩和解压缩swf文件。很早以前发布过一个0.01版。最近复审了代码,发现了一个愚蠢的读二进制文件错误导致没办法正确的解压或者压缩swf文件。今天更正了此bug,重构了部分代码并做了更多测试,已经可以正常使用。
[解决办法]
java实现读取flash的swf文件属性 你可以参考一下
flashattrib.java
*/
package picattrib;
import java.io.IOException;
import java.io.FileInputStream;
public class flashattrib {
public flashattrib() {
}
public static void main(String[] args) {
flashattrib flashattrib = new flashattrib();
byte[] bb=null;
image1 im = null;
try {
bb=flashattrib.readFromFile("d:\\aa.swf");
im = flashattrib.getAttrib(bb);
System.out.println(im.getWidth());
System.out.println(im.getHight());
bb=flashattrib.readFromFile("d:\\bb.swf");
im = flashattrib.getAttrib(bb);
System.out.println(im.getWidth());
System.out.println(im.getHight());
bb=flashattrib.readFromFile("d:\\bb.swf");
im = flashattrib.getAttrib(bb);
System.out.println(im.getWidth());
System.out.println(im.getHight());
} catch (IOException ex1) {
System.out.println(ex1);
}
System.out.println(im.getWidth());
System.out.println(im.getHight());
/*
byte aa=0;
for (int i=0;i<260;i++){
System.out.println(flashattrib.getInt(aa++));
}
*/
}
/**
* @param bb byte[]
* @param start int
* @param leng int
* @return int
*/
public int getWeizhi(int start,int weizhi,int leng,byte[] bb){
int aa=0;
if (weizhi==0) {
aa=getInt(bb[start]);
for (int i=1;i<leng;i++){
aa*=256;
int cc=getInt(bb[start+i]);
aa+=cc;
}
}else{
aa=getInt(bb[start])%16;
aa*=256;
aa+=getInt(bb[start+1]);
aa*=16;
aa+=getInt(bb[start+2])/16;
}
return aa;
}
public image1 getAttrib(byte[] bb){
image1 im=new image1();
//flash文件的宽高位置不固定,分为8种,根据第9位的值,来判断当前flash文件的具体宽高位置
//16进制50,58,60,68,70,78,80,88
switch(bb[8]){
case 80: im.setWidth(getWeizhi(9,0,2,bb)/10);
im.setHight(getWeizhi(11,1,2,bb)/10);
break;
case 88: im.setWidth(getWeizhi(9,1,2,bb)/40);
im.setHight(getWeizhi(12,0,2,bb)/10);
break;
case 96: im.setWidth(getWeizhi(9,1,2,bb)/10);
im.setHight(getWeizhi(12,1,2,bb)/10);
break;
case 104: im.setWidth(getWeizhi(10,0,2,bb)/40);
im.setHight(getWeizhi(13,0,2,bb)/10);
break;
case 112: im.setWidth(getWeizhi(10,0,2,bb)/10);
im.setHight(getWeizhi(13,1,2,bb)/10);
break;
case 120: im.setWidth(getWeizhi(10,1,2,bb)/40);
im.setHight(getWeizhi(14,0,2,bb)/10);
break;
case -128: im.setWidth(getWeizhi(10,1,2,bb)/10);
im.setHight(getWeizhi(14,1,2,bb)/10);
break;
case -120: im.setWidth(getWeizhi(10,0,3,bb)/40);
im.setHight(getWeizhi(15,0,2,bb)/10);
break;
}
return im;
}
public int getInt(byte bb){
if (bb>=0) return bb;
else return 256+bb;
}
private static byte[] readFromFile(String fileName) throws IOException
{
PicsModel model = null;
FileInputStream fin = new FileInputStream(fileName);
byte [] buf = new byte[fin.available()];
fin.read(buf);
fin.close();
return buf;
}
}
/*
image1.java
*/
package picattrib;
public class image1 {
private int width;
private int hight;
private int leng;
public image1() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
image1 image1 = new image1();
}
private void jbInit() throws Exception {
}
public void setWidth(int width) {
this.width = width;
}
public void setHight(int hight) {
this.hight = hight;
}
public void setLeng(int leng) {
this.leng = leng;
}
public int getWidth() {
return width;
}
public int getHight() {
return hight;
}
public int getLeng() {
return leng;
}
}
ava的swf处理库
详细看这里 有下栽http://dennis-zane.javaeye.com/blog/153678
本论坛有一个<Java创建SWF文件>下栽
http://download.csdn.net/source/654410
<java版本的flash文件(swf)播放器>下栽
http://www.pudn.com/downloads111/sourcecode/java/detail461105.html
这个来源与 http://www.javaeye.com/news/3764-swfheader-0-10-released
你也自己去看看 swfheader是一个处理swf文件的工具脚本,可用于读取swf文件头信息、压缩和解压缩swf文件。很早以前发布过一个0.01版。最近复审了代码,发现了一个愚蠢的读二进制文件错误导致没办法正确的解压或者压缩swf文件。今天更正了此bug,重构了部分代码并做了更多测试,已经可以正常使用。
[解决办法]
对不起啊 因为网络太慢 不小心发出去两个 请求斑竹删除其中一个和本次回复 给管理带来不便 对不起啊
[解决办法]
我不知道楼主读这些源文件是要干什么了?如果是网络传递的话,那就是把文件写进流了,然后就是构造byte[] 然后进行传递了。
我的这个源码可以把任何类型的文件都转换过来了。然后在,网络的另一头,同样反过来了。
我的原来的帖子。上面写的很详细了。你在仔细看看了。不知道是不是楼主的意思了。
http://topic.csdn.net/u/20081112/22/6d02a854-6786-4f21-9f43-a2ec4348c7f0.html