int count = 0; //总共读了多少了
int bufferSize = 1024*10; //缓存大小
byte[] buffer = new byte[bufferSize];
while(count<length)
{
if((length-count)<bufferSize) //如果还剩字节小于缓存大小
{
buffer = new byte[length-count];
}
//read size 每次还不一样,新鲜
int readSize = is.read(buffer, 0, buffer.length);
//int readSize = is.read(buffer);
System.out.println("readSize: " + readSize + " buffer.length: " + buffer.length);
os.write(buffer, 0, readSize);
count += readSize;
System.out.println("总大小: " + length + " 已经读了: " + count +" 字节");
}
思路是每次读缓存那么大小的字节,如果当最后读取的字节数小于未读字节数,那么改变缓存大小,
但是问题在于,每次is.read(buffer, 0, buffer.length);时,buffer都不会被读满,比如buffer.length=200,
但is.read返回的值总是小于200,反复若干次读取后,文件是传输完整的。
希望大家能给个思路,我是哪弄得逻辑有问题还是什么原因? 谢谢了
解决方案 »
- 怎么用javac编译程序
- Serverlet
- 邀请有图形学方面知识的人士参加一个电子地图开源项目
- 如何判断客户端是否已经拆线
- 更改JFrame和JInternalFrame标题栏颜色
- abstract的method为什么不能试static,native,以及syncgronized的?
- 关于打包问题?
- 怎样装ORACEL的JDBC驱动.我用的是JAVA 的SDK包在调程序.
- 散分喽!明天一早揭贴!!!
- 我是JAVA的初学者,请各位用什么编程工具好呢,是SDK(我们这找不到有关SDK的盘子)还是VJ++或者JBuilder5?请问高手们java能超过c++吗?
- 要求下拉框能输入值
- 求Java打印bmp格式图片代码
也就是你每次读取的值不一样多了。
1.把缓存从1024*10 重置成1000
2.然后is.read()出来的数按说应该是缓存大小吧?可是这里会read出一个小于1000的数,
3.然后会再次循环n次后,传完文件 。也不会报错~~~
你换成前者试试,保证每次都一样;而后者则是不定的。
实际上不用设置,因为
os.write(buffer, 0, readSize);
只会写有数据的部分
int readSize = is.read(buffer, 0, buffer.length); os.write(buffer, 0, readSize);如果readSize换成buffer.length一定会错的,因为现在readSize并不能读满0到buffer.length个字节数。。从没遇到过这种问题,居然不能读满。。
我之前一直都这样用的
不改变buffer的大小有问题吗?
如果他给的数据比你要读的多,那你需要设置
Thread-5总大小: 264122 已经读了: 35502 字节
Thread-5 改缓存大小为: 228620
readSize: 1460 buffer.length: 228620
Thread-5总大小: 264122 已经读了: 36962 字节
Thread-5 改缓存大小为: 227160
readSize: 2920 buffer.length: 227160
Thread-5总大小: 264122 已经读了: 39882 字节
Thread-5 改缓存大小为: 224240
readSize: 1460 buffer.length: 224240
Thread-5总大小: 264122 已经读了: 41342 字节
Thread-5 改缓存大小为: 222780
readSize: 1460 buffer.length: 222780
Thread-5总大小: 264122 已经读了: 42802 字节
Thread-5 改缓存大小为: 221320
readSize: 1460 buffer.length: 221320
Thread-5总大小: 264122 已经读了: 44262 字节
Thread-5 改缓存大小为: 219860
readSize: 1460 buffer.length: 219860
Thread-5总大小: 264122 已经读了: 45722 字节
Thread-5 改缓存大小为: 218400
readSize: 1460 buffer.length: 218400
Thread-5总大小: 264122 已经读了: 47182 字节
Thread-5 改缓存大小为: 216940
readSize: 2920 buffer.length: 216940
Thread-5总大小: 264122 已经读了: 50102 字节
Thread-5 改缓存大小为: 214020
readSize: 1460 buffer.length: 214020
Thread-5总大小: 264122 已经读了: 51562 字节
Thread-5 改缓存大小为: 212560
readSize: 1460 buffer.length: 212560
Thread-5总大小: 264122 已经读了: 53022 字节
Thread-5 改缓存大小为: 211100
readSize: 1460 buffer.length: 211100
Thread-5总大小: 264122 已经读了: 54482 字节
Thread-5 改缓存大小为: 209640
readSize: 1460 buffer.length: 209640
Thread-5总大小: 264122 已经读了: 55942 字节
Thread-5 改缓存大小为: 208180
readSize: 1276 buffer.length: 208180
Thread-5总大小: 264122 已经读了: 57218 字节
Thread-5 改缓存大小为: 206904
readSize: 2920 buffer.length: 206904
Thread-5总大小: 264122 已经读了: 60138 字节
Thread-5 改缓存大小为: 203984
readSize: 1176 buffer.length: 203984
Thread-5总大小: 264122 已经读了: 61314 字节
Thread-5 改缓存大小为: 202808
readSize: 2048 buffer.length: 202808
Thread-5总大小: 264122 已经读了: 63362 字节
Thread-5 改缓存大小为: 200760
readSize: 2920 buffer.length: 200760
Thread-5总大小: 264122 已经读了: 66282 字节
Thread-5 改缓存大小为: 197840
readSize: 3224 buffer.length: 197840
Thread-5总大小: 264122 已经读了: 69506 字节
Thread-5 改缓存大小为: 194616
readSize: 2920 buffer.length: 194616
Thread-5总大小: 264122 已经读了: 72426 字节
Thread-5 改缓存大小为: 191696
readSize: 1176 buffer.length: 191696
Thread-5总大小: 264122 已经读了: 73602 字节
Thread-5 改缓存大小为: 190520
readSize: 2048 buffer.length: 190520
Thread-5总大小: 264122 已经读了: 75650 字节
Thread-5 改缓存大小为: 188472
readSize: 1460 buffer.length: 188472
Thread-5总大小: 264122 已经读了: 77110 字节
Thread-5 改缓存大小为: 187012
readSize: 1460 buffer.length: 187012
Thread-5总大小: 264122 已经读了: 78570 字节
Thread-5 改缓存大小为: 185552
readSize: 1176 buffer.length: 185552
Thread-5总大小: 264122 已经读了: 79746 字节
Thread-5 改缓存大小为: 184376
readSize: 2048 buffer.length: 184376
Thread-5总大小: 264122 已经读了: 81794 字节
Thread-5 改缓存大小为: 182328
readSize: 2048 buffer.length: 182328
Thread-5总大小: 264122 已经读了: 83842 字节
Thread-5 改缓存大小为: 180280
readSize: 2048 buffer.length: 180280
Thread-5总大小: 264122 已经读了: 85890 字节
Thread-5 改缓存大小为: 178232
readSize: 2048 buffer.length: 178232
Thread-5总大小: 264122 已经读了: 87938 字节
Thread-5 改缓存大小为: 176184
readSize: 2048 buffer.length: 176184
Thread-5总大小: 264122 已经读了: 89986 字节
Thread-5 改缓存大小为: 174136
readSize: 2048 buffer.length: 174136
Thread-5总大小: 264122 已经读了: 92034 字节
Thread-5 改缓存大小为: 172088
readSize: 2048 buffer.length: 172088
Thread-5总大小: 264122 已经读了: 94082 字节
Thread-5 改缓存大小为: 170040
readSize: 2048 buffer.length: 170040
Thread-5总大小: 264122 已经读了: 96130 字节
Thread-5 改缓存大小为: 167992
readSize: 2048 buffer.length: 167992
Thread-5总大小: 264122 已经读了: 98178 字节
Thread-5 改缓存大小为: 165944
readSize: 2048 buffer.length: 165944
Thread-5总大小: 264122 已经读了: 100226 字节
Thread-5 改缓存大小为: 163896
readSize: 2048 buffer.length: 163896
Thread-5总大小: 264122 已经读了: 102274 字节
Thread-5 改缓存大小为: 161848
readSize: 2048 buffer.length: 161848
Thread-5总大小: 264122 已经读了: 104322 字节
Thread-5 改缓存大小为: 159800
readSize: 2048 buffer.length: 159800
Thread-5总大小: 264122 已经读了: 106370 字节
Thread-5 改缓存大小为: 157752
readSize: 2048 buffer.length: 157752
Thread-5总大小: 264122 已经读了: 108418 字节
Thread-5 改缓存大小为: 155704
readSize: 2048 buffer.length: 155704
Thread-5总大小: 264122 已经读了: 110466 字节
Thread-5 改缓存大小为: 153656
readSize: 2048 buffer.length: 153656
Thread-5总大小: 264122 已经读了: 112514 字节
Thread-5 改缓存大小为: 151608
readSize: 2048 buffer.length: 151608
Thread-5总大小: 264122 已经读了: 114562 字节
Thread-5 改缓存大小为: 149560
readSize: 2048 buffer.length: 149560
Thread-5总大小: 264122 已经读了: 116610 字节
Thread-5 改缓存大小为: 147512
readSize: 2048 buffer.length: 147512
Thread-5总大小: 264122 已经读了: 118658 字节
Thread-5 改缓存大小为: 145464
readSize: 2048 buffer.length: 145464
Thread-5总大小: 264122 已经读了: 120706 字节
Thread-5 改缓存大小为: 143416
readSize: 2048 buffer.length: 143416
Thread-5总大小: 264122 已经读了: 122754 字节
Thread-5 改缓存大小为: 141368
readSize: 2048 buffer.length: 141368
Thread-5总大小: 264122 已经读了: 124802 字节
Thread-5 改缓存大小为: 139320
readSize: 2048 buffer.length: 139320
Thread-5总大小: 264122 已经读了: 126850 字节
Thread-5 改缓存大小为: 137272
readSize: 2048 buffer.length: 137272
Thread-5总大小: 264122 已经读了: 128898 字节
Thread-5 改缓存大小为: 135224
readSize: 2048 buffer.length: 135224
Thread-5总大小: 264122 已经读了: 130946 字节
Thread-5 改缓存大小为: 133176
readSize: 2048 buffer.length: 133176
Thread-5总大小: 264122 已经读了: 132994 字节
Thread-5 改缓存大小为: 131128
readSize: 2048 buffer.length: 131128
Thread-5总大小: 264122 已经读了: 135042 字节
Thread-5 改缓存大小为: 129080
readSize: 2048 buffer.length: 129080
Thread-5总大小: 264122 已经读了: 137090 字节
Thread-5 改缓存大小为: 127032
readSize: 2048 buffer.length: 127032
Thread-5总大小: 264122 已经读了: 139138 字节
Thread-5 改缓存大小为: 124984
readSize: 2048 buffer.length: 124984
Thread-5总大小: 264122 已经读了: 141186 字节
Thread-5 改缓存大小为: 122936
readSize: 2048 buffer.length: 122936
Thread-5总大小: 264122 已经读了: 143234 字节
Thread-5 改缓存大小为: 120888
readSize: 2048 buffer.length: 120888
Thread-5总大小: 264122 已经读了: 145282 字节
Thread-5 改缓存大小为: 118840
readSize: 2048 buffer.length: 118840
Thread-5总大小: 264122 已经读了: 147330 字节
Thread-5 改缓存大小为: 116792
readSize: 2048 buffer.length: 116792
Thread-5总大小: 264122 已经读了: 149378 字节
Thread-5 改缓存大小为: 114744
readSize: 2048 buffer.length: 114744
Thread-5总大小: 264122 已经读了: 151426 字节
Thread-5 改缓存大小为: 112696
readSize: 2048 buffer.length: 112696
Thread-5 改缓存大小为: 110648
readSize: 2048 buffer.length: 110648
Thread-5总大小: 264122 已经读了: 155522 字节
Thread-5 改缓存大小为: 108600
readSize: 2048 buffer.length: 108600
Thread-5总大小: 264122 已经读了: 157570 字节
Thread-5 改缓存大小为: 106552
readSize: 4096 buffer.length: 106552
Thread-5总大小: 264122 已经读了: 161666 字节
Thread-5 改缓存大小为: 102456
readSize: 2048 buffer.length: 102456
Thread-5总大小: 264122 已经读了: 163714 字节
Thread-5 改缓存大小为: 100408
readSize: 2048 buffer.length: 100408
Thread-5总大小: 264122 已经读了: 165762 字节
Thread-5 改缓存大小为: 98360
readSize: 2048 buffer.length: 98360
Thread-5总大小: 264122 已经读了: 167810 字节
Thread-5 改缓存大小为: 96312
readSize: 2048 buffer.length: 96312
Thread-5总大小: 264122 已经读了: 169858 字节
Thread-5 改缓存大小为: 94264
readSize: 2048 buffer.length: 94264
Thread-5总大小: 264122 已经读了: 171906 字节
Thread-5 改缓存大小为: 92216
readSize: 2048 buffer.length: 92216
Thread-5总大小: 264122 已经读了: 173954 字节
Thread-5 改缓存大小为: 90168
readSize: 2048 buffer.length: 90168
Thread-5总大小: 264122 已经读了: 176002 字节
Thread-5 改缓存大小为: 88120
readSize: 2048 buffer.length: 88120
Thread-5总大小: 264122 已经读了: 178050 字节
Thread-5 改缓存大小为: 86072
readSize: 2048 buffer.length: 86072
Thread-5总大小: 264122 已经读了: 180098 字节
Thread-5 改缓存大小为: 84024
readSize: 2048 buffer.length: 84024
Thread-5总大小: 264122 已经读了: 182146 字节
Thread-5 改缓存大小为: 81976
readSize: 2048 buffer.length: 81976
Thread-5总大小: 264122 已经读了: 184194 字节
Thread-5 改缓存大小为: 79928
readSize: 2048 buffer.length: 79928
Thread-5总大小: 264122 已经读了: 186242 字节
Thread-5 改缓存大小为: 77880
readSize: 2048 buffer.length: 77880
Thread-5总大小: 264122 已经读了: 188290 字节
Thread-5 改缓存大小为: 75832
readSize: 2048 buffer.length: 75832
Thread-5总大小: 264122 已经读了: 190338 字节
Thread-5 改缓存大小为: 73784
readSize: 2048 buffer.length: 73784
Thread-5总大小: 264122 已经读了: 192386 字节
Thread-5 改缓存大小为: 71736
readSize: 2048 buffer.length: 71736
Thread-5总大小: 264122 已经读了: 194434 字节
Thread-5 改缓存大小为: 69688
readSize: 2048 buffer.length: 69688
Thread-5总大小: 264122 已经读了: 196482 字节
Thread-5 改缓存大小为: 67640
readSize: 2048 buffer.length: 67640
Thread-5总大小: 264122 已经读了: 198530 字节
Thread-5 改缓存大小为: 65592
readSize: 2048 buffer.length: 65592
Thread-5总大小: 264122 已经读了: 200578 字节
Thread-5 改缓存大小为: 63544
readSize: 8192 buffer.length: 63544
Thread-5总大小: 264122 已经读了: 208770 字节
Thread-5 改缓存大小为: 55352
readSize: 2048 buffer.length: 55352
Thread-5总大小: 264122 已经读了: 210818 字节
Thread-5 改缓存大小为: 53304
readSize: 2048 buffer.length: 53304
Thread-5总大小: 264122 已经读了: 212866 字节
Thread-5 改缓存大小为: 51256
readSize: 2048 buffer.length: 51256
Thread-5总大小: 264122 已经读了: 214914 字节
Thread-5 改缓存大小为: 49208
readSize: 2048 buffer.length: 49208
Thread-5总大小: 264122 已经读了: 216962 字节
Thread-5 改缓存大小为: 47160
readSize: 2048 buffer.length: 47160
Thread-5总大小: 264122 已经读了: 219010 字节
Thread-5 改缓存大小为: 45112
readSize: 2048 buffer.length: 45112
Thread-5总大小: 264122 已经读了: 221058 字节
Thread-5 改缓存大小为: 43064
readSize: 2048 buffer.length: 43064
Thread-5总大小: 264122 已经读了: 223106 字节
Thread-5 改缓存大小为: 41016
readSize: 2048 buffer.length: 41016
Thread-5总大小: 264122 已经读了: 225154 字节
Thread-5 改缓存大小为: 38968
readSize: 2048 buffer.length: 38968
Thread-5总大小: 264122 已经读了: 227202 字节
Thread-5 改缓存大小为: 36920
readSize: 2048 buffer.length: 36920
Thread-5总大小: 264122 已经读了: 229250 字节
Thread-5 改缓存大小为: 34872
readSize: 2048 buffer.length: 34872
Thread-5总大小: 264122 已经读了: 231298 字节
Thread-5 改缓存大小为: 32824
readSize: 2048 buffer.length: 32824
Thread-5总大小: 264122 已经读了: 233346 字节
Thread-5 改缓存大小为: 30776
readSize: 2048 buffer.length: 30776
Thread-5总大小: 264122 已经读了: 235394 字节
Thread-5 改缓存大小为: 28728
readSize: 2048 buffer.length: 28728
Thread-5总大小: 264122 已经读了: 237442 字节
Thread-5 改缓存大小为: 26680
readSize: 2048 buffer.length: 26680
Thread-5总大小: 264122 已经读了: 239490 字节
Thread-5 改缓存大小为: 24632
readSize: 2048 buffer.length: 24632
Thread-5总大小: 264122 已经读了: 241538 字节
Thread-5 改缓存大小为: 22584
readSize: 2048 buffer.length: 22584
Thread-5总大小: 264122 已经读了: 243586 字节
Thread-5 改缓存大小为: 20536
readSize: 2048 buffer.length: 20536
Thread-5总大小: 264122 已经读了: 245634 字节
Thread-5 改缓存大小为: 18488
readSize: 2048 buffer.length: 18488
Thread-5总大小: 264122 已经读了: 247682 字节
Thread-5 改缓存大小为: 16440
readSize: 2048 buffer.length: 16440
Thread-5总大小: 264122 已经读了: 249730 字节
Thread-5 改缓存大小为: 14392
readSize: 2048 buffer.length: 14392
Thread-5总大小: 264122 已经读了: 251778 字节
Thread-5 改缓存大小为: 12344
readSize: 2048 buffer.length: 12344
Thread-5总大小: 264122 已经读了: 253826 字节
Thread-5 改缓存大小为: 10296
readSize: 2048 buffer.length: 10296
Thread-5总大小: 264122 已经读了: 255874 字节
Thread-5 改缓存大小为: 8248
readSize: 2048 buffer.length: 8248
Thread-5总大小: 264122 已经读了: 257922 字节
Thread-5 改缓存大小为: 6200
readSize: 2048 buffer.length: 6200
Thread-5总大小: 264122 已经读了: 259970 字节
Thread-5 改缓存大小为: 4152
readSize: 2048 buffer.length: 4152
Thread-5总大小: 264122 已经读了: 262018 字节
Thread-5 改缓存大小为: 2104
readSize: 2048 buffer.length: 2104
Thread-5总大小: 264122 已经读了: 264066 字节
Thread-5 改缓存大小为: 56
readSize: 56 buffer.length: 56
Thread-5总大小: 264122 已经读了: 264122 字节
Thread-5 改缓存大小为: 228620 这个好奇怪,都还未小于1024*10就改了,这个应该不是你贴的代码产生的吧.还有就是,你这个是什么流? 是否已经生成好的文件来的? 如果不是,那么每次read只能根据available多少来读,因为可能你对方的流还没来得及过来(虽然还有很多字节).
也许正是这个原因吧,多谢了!!!!!!!!!!!!!分给您10分吧,我分不多,我要分上面兄弟10分
看来只有拿实例来说明public static void main( String[] args )
{
try
{
FileInputStream fis = new FileInputStream( "G:\\test.txt" );
FileOutputStream fos = new FileOutputStream( "G:\\result.txt" );
byte[] buffer = new byte[1024];
//其实就这么简单
int count;
while( (count = fis.read( buffer )) != -1 )
{
fos.write( buffer, 0, count );
}
fos.close();
fis.close();
}
catch( FileNotFoundException e )
{
e.printStackTrace();
}
catch( IOException e )
{
e.printStackTrace();
}
}代码我运行过了,没有问题
while (count < length
&& (readSize = in.read(buffer, 0, length - count)) != -1)
{
os.write(buffer, 0, readSize);
lenCount += len;
}
lenCount += len; 改为 count += readSize ;