为什么用字节流读取写入文件会造成文件大小不一致? while( in2.available()!=-1)//这换成-1试试 out2.writeByte(in2.readByte()); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我试过这样的情况 JAVA的这个available函数好像有点问题你最好用一个变量先取出它的值 再来做WHILE 不用次次都调用 如果你分配读取的byte数组足够大,这个问题就应该不存在了.但是建议采用Reader/Writer类组完成文件读写操作 对于像jpg这类格式的文件也可用Reader/Writer类来进行读写吗? 为改成如下的方式就正常了: byte[] b = new byte[2048]; int readLen = 0; while( (readLen=in2.read(b,0,b.length))!=-1) out2.write(b,0,readLen);这是为什么呢?为怎么知道该byte数组应该分配多大呢? sorry没有看清题目,reader和writer是用来读取文本文件的,数据文件的读取long len = sourceFile.length();byte[] b;if(len > Integer.MAX_VALUE){ throw new Exception("File is too large!"); }else{ b = new byte[(int)len];}int bytes = 0;int offset = 0;try { FileInputStream fis = new FileInputStream(sourceFile); FileOutputStream fos = new FileOutputStream(targetFile); while(offset < b.length && (bytes = fis.read(b,offset,b.length-offset)) >= 0){ offset += bytes; } fos.write(encoder.encode(b)); fos.close(); fis.close();} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}应该声明一个长度和源文件等长的byte数组,但是file对象得到的length是long类型,声明数组的维度只能是整型,也就是说源文件的体积被限制在Integer的最大值,大概是4g多。这样,得到file的长度之后,就可以根据这个长度创建数组了。 怎么知道该byte数组应该分配多大呢? to:javafaq2004(农村干部瞎忙活)long len = sourceFile.length();通过得到源文件的长度就可以知道分配多大的数组了 byte[] b = new byte[2048];int startPosition = 0;int readLen = 0;int fileLen = sourceFile.length();while(startPostion < fileLen) while( (readLen=in2.read(b,0,b.length))!=-1) { out2.write(b,0,readLen); startPostion += readLen; } ........ byte数组大,缓存就大,byte数组小缓存就小,你把它设成大小1,也没有问题,就是计算机忙了些,呵呵 错误的类文件 关于JAVA认证考试 JAVA 编程的问题 问个比较初级的问题native2ascii不是内部命令 使用httpclient后,return不返回值,请大家帮忙看一下 求一个比较算法 直连SQLSERVER问题 java应用程序中如何调用声音文件 请教一个关于Java Application中Frame的模态非模态的问题。 在浏览器向web server提交信息时,form中text字段内的字符串是采用什么方式编码的 菜鸟求救______急!!!在线急等!! 有关让窗口背景变透明的问题????????
你最好用一个变量先取出它的值 再来做WHILE 不用次次都调用
但是建议采用Reader/Writer类组完成文件读写操作
byte[] b = new byte[2048];
int readLen = 0;
while( (readLen=in2.read(b,0,b.length))!=-1)
out2.write(b,0,readLen);
这是为什么呢?为怎么知道该byte数组应该分配多大呢?
byte[] b;
if(len > Integer.MAX_VALUE){
throw new Exception("File is too large!");
}else{
b = new byte[(int)len];
}
int bytes = 0;
int offset = 0;
try {
FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(targetFile);
while(offset < b.length && (bytes = fis.read(b,offset,b.length-offset)) >= 0){
offset += bytes;
}
fos.write(encoder.encode(b));
fos.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}应该声明一个长度和源文件等长的byte数组,但是file对象得到的length是long类型,声明数组的维度只能是整型,也就是说源文件的体积被限制在Integer的最大值,大概是4g多。这样,得到file的长度之后,就可以根据这个长度创建数组了。
long len = sourceFile.length();
通过得到源文件的长度就可以知道分配多大的数组了
int startPosition = 0;
int readLen = 0;
int fileLen = sourceFile.length();
while(startPostion < fileLen)
while( (readLen=in2.read(b,0,b.length))!=-1)
{
out2.write(b,0,readLen);
startPostion += readLen;
}
........ byte数组大,缓存就大,byte数组小缓存就小,你把它设成大小1,也没有问题,就是计算机忙了些,呵呵