亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

輸入流不讀取所有文件

輸入流不讀取所有文件

米脂 2022-06-23 20:21:12
我寫的文件比原始文件小 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
查看完整描述

2 回答

?
慕姐8265434

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


查看完整回答
反對 回復 2022-06-23
?
絕地無雙

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


查看完整回答
反對 回復 2022-06-23
  • 2 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號