为了账号安全,请及时绑定邮箱和手机立即绑定

输入流不读取所有文件

输入流不读取所有文件

米脂 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 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信