2 回答

TA貢獻1813條經驗 獲得超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

TA貢獻1946條經驗 獲得超4個贊
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
添加回答
舉報