首页 > 解决方案 > 输入流不读取所有文件

问题描述

我写的文件比原始文件小 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

标签: javainputstream

解决方案


在代码进入循环并放入缓冲区之前,最多读取 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

推荐阅读