notas de estudo java: Córrego IO (fluxos de entrada e saída)

Um, IO fluxo Resumo e Classificação
1 Visão geral: fluxo de IO para processar a transferência de dados entre os dispositivos, as operações de Java sobre o fluxo de dados por meio de, objetos Java para o fluxo de operação do pacote de IO
2, fluxo IO a classificação
de acordo com o fluxo de dados

fluxo de entrada fluxo de saída
dados Leia gravar dados

De acordo com os tipos de dados

fluxo de bytes fluxo de caracteres
Você pode ler e escrever arquivos de qualquer tipo, tais como arquivo de texto de vídeo e áudio Você pode ler e escrever arquivos de texto
fluxo de bytes classe base Resumo: InputStream, o OutputStream fluxos caráter de classe base abstrata: leitor, escritor
Byte fluxo de entrada InputStream, saída de bytes fluxo OutputStream Character-entrada fluxo Reader, personagem de saída de fluxo de escritor

Nota : Este é derivado de quatro classe base abstrata é um nome subclasse como um sufixo ao nome do nome de seu pai subclasse.
Segundo, o fluxo de caracteres
1, os dados FileOutputStream write

①, construtor de
FileOutputStream (arquivo de arquivo) // criar um arquivo para gravar o arquivo de dados representado pelo objeto File especificado no fluxo de saída.
FileOutputStream (String name) // criar uma gravação de dados em um arquivo com o nome especificado do fluxo de arquivo de saída.
②, FileOutputStream três write () método
de gravação public void (int b): uma gravação byte mais do que um byte na frente do corte bytes
de gravação public void (byte [] b ): Adicione uma matriz de bytes
de gravação public void (byte [] b, int fora , int len): escrever uma parte da matriz de bytes
③, os dados de escrita FileOutputStream escrita adicional implementar e de avanço de linha

janelas Linux Mac
\ R \ n \ n \ r

FileOutputStream (String nome, boolean append) , parâmetro 2 representando se a escrita adicional
exemplo: FileOutputStream out = new FileOutputStream ( " b.txt", true); // true representa escrita adicional

public class MyIODemo {
    public static void main(String[] args) throws IOException {
      //参2 代表是否追加写入
      //FileOutputStream(String name, boolean append)
      //创建一个向具有指定 name 的文件中写入数据的输出文件流。
      FileOutputStream out = new FileOutputStream("b.txt",true);//true 表示追加写入
      out.write(97); //一次写入一个字节
      out.write(98);
      //写入一个字节数组
      out.write("\r\n".getBytes());//换行
      out.write("像我这样优秀的人,本该灿烂过一生".getBytes());
      out.write("\r\n".getBytes());
      //写入字节数组的一部分 从某个索引开始,写多少个字节
      out.write("怎么二十多年到头来,还在人海里浮沉".getBytes(),0,27);
      out.write("\r\n".getBytes());
      //流使用完毕之后,必须释放资源
      out.close();
    }
}

3, FilelnputStream ler dados
①, o byte de entrada é obtido a partir do sistema de ficheiros, um ficheiro
②, FilelnputStream (String nome)
ligado a um ficheiro real a ser criada pela abertura de um FilelnputStream, o ficheiro através do nome de caminho sistema de arquivo nome especificado.
③, FileInputStream (arquivo Arquivo)
Cria um FileInputStream, abrindo uma conexão com o arquivo real, o arquivo especificado pelo arquivo de objeto de arquivo do sistema de arquivos.
④, fluxo de entrada de ficheiro, não há erro se está associada é relatado
int ler (): lido um byte, ineficiente
byte [] = new bytes new byte [1024];
int len = in.read (bytes) ; // ler uma vez valor de retorno é um array de bytes que você ler o número de bytes de válido
Nota: depois que o fluxo após o uso, os recursos devem ser liberados
4 de entrada e saída de bytes a eficiência do fluxo
BufferedOutputStream (OutputStream out) Criar um novo fluxo de saída tamponada a gravação de dados para o fluxo de saída especificado subjacente.
BufferedInputStream (InputStream in) Cria um BufferedInputStream e salva seu argumento, o fluxo de entrada no, para uso posterior.
Substancialmente a mesma utilização eficiente da entrada e saída de fluxos substancialmente byte corrente
5, Processo

分别使用使用高效字节流和基本字节流复制文件   
 public class MyDemo3 {
     public static void main(String[] args) throws IOException { 
        long start = System.currentTimeMillis();
        copy2(); //耗时18542毫秒  耗时13802毫秒
        copy1();  //耗时14046毫秒 耗时14331毫秒
        long end = System.currentTimeMillis();
        System.out.println("耗时"+(end-start)+"毫秒");
    }
    private static void copy2() throws IOException {
        FileInputStream in = new FileInputStream("E:\\我的图片和音乐\\疯狂动物城.mp4");
        FileOutputStream out = new FileOutputStream("D:\\疯狂动物城.mp4");
        //创建一个数组缓冲区
        byte[] bytes = new byte[1024*8];
        int len = 0; //记录读取到的有效的字节个数
        while ((len = in.read(bytes)) != -1) {
            out.write(bytes, 0, len);
            out.flush();
        }
        in.close();
        out.close();
    }
    private static void copy1() throws IOException {
        BufferedInputStream in = new BufferedInputStream(new FileInputStream("E:\\我的图片和音乐\\疯狂动物城.mp4"));
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("D:\\疯狂动物城.mp4"));
        byte[] bytes = new byte[1024*8];
        int len=0;
        while ((len=in.read(bytes))!=-1){
            out.write(bytes,0,len);
        }
        out.close();
        in.close();
    }
    }

Terceiro, o fluxo de caracteres
1 por causa do fluxo de caracteres aparece : operações chinesas fluxo devido byte não é particularmente conveniente, portanto, java fornece um fluxo de caracteres.
= + Tabela Byte fluxo de caracteres de código corrente
2, classe de cadeia de codificação e descodificação de problemas na
codificação : a cadeia é convertida em uma matriz de bytes, a leitura pode ler no

  • public byte [] getBytes (); usando conjunto padrão de codificação de caracteres da plataforma é byte string esta sequência, armazenando o resultado num novo array de bytes.
  • public byte [] getBytes (String charsetName) utilizando o conjunto de caracteres especificado codificação esta corda é uma sequência de bytes, e armazenando o resultado num novo array de bytes.

Decodificação : a conversão de matriz de bytes em uma string, na leitura pode entender

  • public String (byte [] bytes): Especifica o conjunto de caracteres padrão usando a matriz de bytes internet decodificado, uma nova cadeia de construção.
  • public String (byte [] bytes, String charsetName) matriz de bytes especificado, utilizando o conjunto de caracteres de descodificação especificado, construir uma nova cadeia.

3, a utilização de comutações OutputStreamWriter
①, OutputStreamWriter
é um personagem ponte fluxos de fluxo de bytes: a tabela de código pode ser usado para especificar o código de caracteres gravados para o fluxo em bytes. Ele usa o conjunto de caracteres pode ser especificado pelo nome ou explicitamente dado, caso contrário ele irá aceitar conjunto de caracteres padrão da plataforma.
②, o construtor
a: OutputStreamWriter (OutputStream out) // criar o OutputStreamWriter caracteres padrão de codificação.
b: OutputStreamWriter (fora OutputStream, Charset cs) // Cria um OutputStreamWriter determinado conjunto de caracteres.
Nota: O arquivo associado com o fluxo de saída, e se não, o sistema criará automaticamente
③, 5 Zhong escrever caracteres os fluxos de dados maneira

public void write(int c) 写一个字符
public void write(char[] cbuf) 写一个字符数组
public void write(char[] cbuf,int off,int len) 写一个字符数组的 一部分
public void write(String str) 写一个字符串
public void write(String str,int off,int len) 写一个字符串的一部分
举例:
public class MyDemo {
public static void main(String[] args) throws IOException {
    OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("a.txt"));
    //往文件中写入数据
    out.write('尼'); //一次写入一个字符
    out.write("\r\n");
    out.flush();
    out.write("我爱学java");
    out.write("\r\n");
    out.flush();
    out.write("路慢慢慢其修远兮,吾将上下而求索", 0, 8);
    out.write("\r\n");
    out.flush();
    out.write(new char[]{'a', '9', 98, 'e'});
    out.write("\r\n");
    out.write(new char[]{'我', '爱', '你', '们'}, 2, 2);
    out.write("\r\n");
    //字符流 需要将数据从缓冲区刷新过去
    out.flush();
    out.close(); //刷新并关闭
 }
}

4, a conversão usando o fluxo InputStreamReader
① construtor
InputStreamReader (InputStream é): lendo a codificação padrão (GBK) dados
InputStreamReader (InputStream é, String charsetName) : ler os dados codificados com o especificado
dois tipos de leitura ②, o fluxo de caracteres forma dos dados
int pública ler () para ler um carácter
int pública de leitura (char [] cbuf ) lê uma matriz de caracteres ou -1, se não ler

  public class CopyFile2 {
    public static void main(String[] args) throws IOException {
        InputStreamReader in = new InputStreamReader(new FileInputStream("a.txt"));
       OutputStreamWriter out = new OutputStreamWriter(newFileOutputStream("b.txt"));
        //创建一个字符缓冲区
        char[] chars = new char[100];  
        int len = 0; //len 是记录 你每次读取到的有效的字符个数
        while ((len=in.read(chars)) != -1) {
            out.write(chars, 0, len);//
            out.flush(); //字符流记得刷新一下
        }
        //释放资源
        in.close();
        out.close();
    }
}

5, conveniente classes de fluxo de caracteres
porque o nome é a conversão de fluxo muito tempo, e nós não precisamos de desenvolver o conjunto de caracteres em geral, de modo java nos dar fácil conversão correspondente à classe fluxo. A única desvantagem é que você não pode especificar a codificação.

fluxo de conversão classe de conveniência
OutputStreamWriter FileWriter
InputStreamReader FileReade

FileWriter (Ficheiro); Constrói um objeto FileWriter dado um objeto File.
FileWriter (String nomeArquivo); configurado objeto FileWriter dado um nome de ficheiro.
6, um personagem eficiente fluxo Livro entrada
①, fluxo de saída de caracteres eficiente: BufferedWriter // gravar dados
construtor: BufferedWriter público, (escritor W)
②, eficiente fluxo de entrada de caracteres: BufferedReader // dados lidos
construtor: BufferedReader pública (leitor e)
função especial ③, personagem buffer de fluxo
BufferedWriter: novaLinha public void (): o sistema determina o sistema de alimentação de linha de quebra de linha tendo compatibilidade.
BufferedReader: readLine public String (): uma vez ler uma linha de dados é lido nova linha nova linha é marcado no embrulho podia ler retornos de dados nulo.

举例://使用高效的字符流,采用读取一行,写入一行的方式来复制文本文件
public class MyDemo8 {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("a.txt"));
        //BufferedWriter(Writer out)
        //创建一个使用默认大小输出缓冲区的缓冲字符输出流。
        BufferedWriter out = new BufferedWriter(new FileWriter("b.txt"));
        String line=null; //记录每次读取到的一行文本
        while ((line=in.readLine())!=null){ //这里注意读取不到返回null
            out.write(line);
            out.newLine(); //写入一个换行符
            out.flush();//刷新
        }
        //释放资源
        out.close();
        in.close();
    }
}
Publicado 24 artigos originais · ganhou elogios 11 · vista 2051

Acho que você gosta

Origin blog.csdn.net/weixin_43791069/article/details/86548116
Recomendado
Clasificación