Topic: 谁能帮我解决这个流的大问题 ?

  Print this page

1.谁能帮我解决这个流的大问题 ? Copy to clipboard
Posted by: snooopy
Posted on: 2005-10-13 00:47

我写了这两个程序 ,,

//  将一个jpg的文件分解一个文件成每个10k大的文件 !
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Rmp3 {
static int index = 0;
public static void CreateNew(FileInputStream FIS) throws Exception {
File F = new File("C:\\tmp\\"+"no"+ index++ +".jpg");
byte [] buf = new byte[10240];
while( FIS.read(buf) != -1){
FileOutputStream FOS = new FileOutputStream(F);
for (int i=0;i<buf.length;i++){
if (buf[i] != 0){
FOS.write(buf[i]);
}
}
if ( FIS.available() != -1){
CreateNew(FIS);
}
}
}

public static void main(String[] args) throws Exception{
File F = new File("C:\\tmp\\therock01.jpg");
FileInputStream FIS = new FileInputStream(F);
CreateNew(FIS);
FIS.close();
}
}


 // 将分解的文件进行合并
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class AddFind {
public static void find(File F) throws Exception {
if (F.getName().endsWith(".jpg")){

FileInputStream FIS = new FileInputStream(F);
CreateNew(FIS);
} else {
File [] Fa = F.listFiles();
for (int i=0;i<Fa.length;i++){
find(Fa[i]);
}
}
}
public static void CreateNew(FileInputStream FIS) throws Exception {
byte [] buf = new byte [FIS.available()];
File FF = new File("C:\\tmp\\two.jpg");
while( (FIS.read(buf)) != -1){
FileOutputStream FOS = new FileOutputStream(FF,true);
for (int i=0;i<buf.length;i++){
if (buf[i] != 0){
FOS.write(buf[i]);
}
}
FOS.close();
}
}
public static void main(String[] args) throws Exception{
File F = new File("C:\\tmp\\bb\\jpg\\");
find(F);
}
}


问题 : 我将一个therock01.jpg,379k的文件分解了,分解后是38个文件
但合并的时候,文件却打不开,也就是two.jpg,合并后只是376k而已 ?
1:为什么会出现这样的情况,是否jpg不能用我这样的操作方式 ?
2:为什么我用分解和合并出来的文件容量大小都不一样 ? 合并后的文件少了什么 ?
3:我另外用了一个mp3的做了实验,结果是:原先是7.13m的mp3,分解合并后是7.06m ?我这样的操作方式同样可以用在mp3上吗 ?

2.Re:谁能帮我解决这个流的大问题 ? [Re: snooopy] Copy to clipboard
Posted by: snowbug
Posted on: 2005-10-13 23:43

流的读入并不是在读满你的 buf 之后才返回,而是每次读入的字节数是不确定的。用
int count = FIS.read(buf);
来检测真正读入的数据有多少个字节。

所以简单来说,你需要自己判断每次读入的字节数,自己判断有没有到 10k ,然后转到下一个文件。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923