java - 输入流不读取所有文件
问题描述
我写的文件比原始文件小 2048 字节,是一个完美的副本。
byte [] buffer = new byte[2048];
int readBytes = inputstream.read(buffer, 0, 2048);
while(readBytes !=-1){
readBytes = inputstream.read(buffer, 0, 2048);
for(int i = 0;i<readBytes;i++){
int decimal = buffer[i];
String binario = conversor.ConverterDecimalToBinario(decimal);
int decimal1 = conversor.ConverterBinarioToDecimal(binario);
outputstream.write(decimal1);//-----------------------------------------GRAVAÇÃO
}//FIM DO FOR
}//FIM DO WHILE
解决方案
在代码进入循环并放入缓冲区之前,最多读取 2048 个字节。
在循环中用下一个(最多)2048 字节覆盖缓冲区之前,不会以任何方式处理这个(最多)2048。(见代码中的标记)
本质上,第一个 2048 被跳过。
byte [] buffer = new byte[2048];
//reads 2048 bytes.
int readBytes = inputstream.read(buffer, 0, 2048);
while(readBytes !=-1){
//reads 2048 bytes - overwrites buffer - furst chunk is skipped!
readBytes = inputstream.read(buffer, 0, 2048);
for(int i = 0;i<readBytes;i++){
int decimal = buffer[i];
String binario = conversor.ConverterDecimalToBinario(decimal);
int decimal1 = conversor.ConverterBinarioToDecimal(binario);
outputstream.write(decimal1);//-----------------------------------------GRAVAÇÃO
}//FIM DO FOR
}//FIM DO WHILE
对于不会覆盖的东西 - 在循环结束时读取下一个块:
byte [] buffer = new byte[2048];
//reads 2048 bytes.
int readBytes = inputstream.read(buffer, 0, 2048);
while(readBytes !=-1){
for(int i = 0;i<readBytes;i++){
int decimal = buffer[i];
String binario = conversor.ConverterDecimalToBinario(decimal);
int decimal1 = conversor.ConverterBinarioToDecimal(binario);
outputstream.write(decimal1);//-----------------------------------------GRAVAÇÃO
}//FIM DO FOR
readBytes = inputstream.read(buffer, 0, 2048);
}//FIM DO WHILE
或者你可以做这样的事情(如果你喜欢这种赋值和比较的组合,那就是个人喜好了):
byte [] buffer = new byte[2048];
int readBytes;
while(-1 != ( readBytes = inputstream.read(buffer, 0, 2048))){
for(int i = 0;i<readBytes;i++){
int decimal = buffer[i];
String binario = conversor.ConverterDecimalToBinario(decimal);
int decimal1 = conversor.ConverterBinarioToDecimal(binario);
outputstream.write(decimal1);//-----------------------------------------GRAVAÇÃO
}//FIM DO FOR
}//FIM DO WHILE
推荐阅读
- regex - 通过分隔符拆分 CLOB 数据时面临问题
- macos - net.LookUpHost() 使用 os.Hostname() 后没有输出这样的主机
- laravel - VSCODE php Intelephense 查找显示重复项的引用
- java - 加载更多 Instagram 评论和点赞
- java - 以下程序的输出给我,它只是没有点击。答案是 6 3,我显然不明白
- python - 为什么我要在 Django 中连接库路径?
- c# - Azure 存储队列中的“Execution Timeout Expired”消息 - 过去几天没有将数据库记录推送到搜索索引
- python - Python更改套接字窗口标题
- python - 在报告 Python 版本的复杂 Bash 表达式中使用“egrep”进行过滤
- html - html中间文本对齐