我写的文件比原始文件小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
答案 0 :(得分:2)
在代码进入循环并放入缓冲区之前,最多读取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
答案 1 :(得分:0)
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import java.util.*;
import java.nio.charset.StandardCharsets;
import java.io.File;
//===========================================================================================================================*/
class conversor {
/**
* Converte decimal em binário
* */
public static String ConverterDecimalToBinario(int numeroDecimal){
String binario = "";
String bin7 = "0000000";
String bin6 = "000000";
String bin5 = "00000"; //Completa números binários pequenos, para ficar com 8 bits
String bin4 = "0000";
String bin3 = "000";
String bin2 = "00";
String bin1 = "0";
if (numeroDecimal==0){binario = "00000000";} //Se entra 0 decimal sai 8 zeros(em binário) // Converte decimal em binário
while(numeroDecimal > 0) {
binario = (numeroDecimal % 2) + binario;
numeroDecimal /= 2;
}
int stringLength = binario.length(); //tamanho do número sem completar os zero dos 8 bits
if(stringLength==1){binario = bin7+binario; }
if(stringLength==2){binario = bin6+binario; } //concatena os zeros que faltam
if(stringLength==3){binario = bin5+binario; }
if(stringLength==4){binario = bin4+binario; }
if(stringLength==5){binario = bin3+binario; }
if(stringLength==6){binario = bin2+binario; }
if(stringLength==7){binario = bin1+binario; }
return binario;
}
//-------------------------------------------------
/**
* Converte binario em decimal
* */
public static int ConverterBinarioToDecimal(String numeroBinario){
int sum = 0;
int size = numeroBinario.length(); //converte binário em decimal
char c;
for(int i = 0; i < size; i++){
c = numeroBinario.charAt(i);
if (c == '0') continue;
sum += Math.pow(2, (size-(i+1)));
}
return sum;
}}
//----------------------------------------------------FIM DO CONVERSOR---------------------------------------------------
public class teste {
public static void main(String[] args)throws java.io.IOException {
int contadorx = 0;
int terminou = 0;
InputStream inputstream; OutputStream outputstream;
inputstream = new BufferedInputStream(new FileInputStream("C:\\Users\\klebe\\Desktop\\tatuagem.png"));
outputstream = new FileOutputStream("C:\\Users\\klebe\\Desktop\\deucerto.png");
//--------------------------------------------TAMANHO DO ARQUIVO--------------------------------------------
File f = new File ("C:\\Users\\x\\Desktop\\tatuagem.png");
Long tamanhodoarquivo1 = f.length();
double tamanhodoarquivo = (double)tamanhodoarquivo1;
double conttamanhodoarquivo=0;
//-------------------------------------FIM TAMANHO DO ARQUIVO----------------------------------------
int x = 0;
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
conttamanhodoarquivo=conttamanhodoarquivo+1;
//-------------------------------------------------------------------------------------------------------------
// if (outputstream != null){
// outputstream.close();
// inputstream.close();
// }//FIM DO IF
}//FIM DO PUBLIC STATIC VOID MAIN
}//FIM DA CLASS PRINCIPAL