Javaの基礎IO

流れの概念

フロー:でJavaを、すべてのデータを読み込み、ストリームを使用して書かれています。流れがシーケンシャルのセットで、起動とバイトの集まりで終わる、データ伝送または抽象の総称です。
その2つのデバイス間のデータ伝送は、本質は、ストリームで、フローと呼ばれるデータ伝送の、フロー抽象的な、より直感的に便利なデータ操作の様々なタイプのデータ伝送特性。
流れの影響:データ・ソースと宛先の搬送経路を確立します

ストリームの分類

  • 出力ストリームの入力:フローで割った値
  • データ点に係る単位処理:バイトストリーム(8バイト)、(16バイト)の文字ストリーム

入力、出力は何ですか

入力は、メモリに(ファイル、キーボード、等を含む)は、種々の入力デバイスから読み出されたデータです。
出力対照的には、(例えばファイル、ディスプレイ、ディスク、等)の様々な出力装置にデータを書き込むことです。
ファイルの観点から簡潔な要約、入力データ・ストリームが読み込まれ、書き込みデータの出力ストリームです。このプロセスでは、常に基準点としてメモリを置きます。

文字ストリーム、バイトストリームとは何ですか

あなたはファイルの内容に対処したい場合は、ストリームの動作モードによって行われなければなりません。
:java.ioパッケージには、二つの流れに分割されるバイトストリームと文字ストリームの
バイトストリーム:データストリームは、データバイトの最小単位です。InputStream、OutputStreamの。
文字のストリーム:データストリームは、データ文字の最小単位である、Unicode文字のJavaの文字は2つのバイトを占めています。リーダー、ライター。
ここに画像を挿入説明

バイトストリーム

1、FileInputStreamの和のFileOutputStream

  • FileInputStreamを取得する入力画像データ基づき、生のバイトストリームとして読み取るために、ファイル内のファイル・システムからバイト
  • 出力ストリームまたはファイルのFileDescriptorにデータを書き込むためのFileOutputStreamファイル出力ストリーム。

例えば:このパスの下に「hello.txt」ファイルを取得し、同じドキュメントの別のコピーの下で再びパス:今の私は、「\ビットD」を見つけます。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Solution {
    public static void main(String[] args) throws IOException {
        FileInputStream fin = new FileInputStream("D:\\bit\\hello.txt");
        FileOutputStream fout = new FileOutputStream("D:\\bit\\hell0Copy.txt");
        int len = 0;
        byte[] buff = new byte[1024];
        while ((len = fin.read(buff)) != -1) {
            fout.write(buff, 0, len);
        }
        fin.close();
        fout.close();
    }
}

ここに画像を挿入説明
2. BufferedInputStreamを和なBufferedOutputStream

?なぜあなたはキャッシュフロー必要なのですか
A:我々は、ファイルの読み込みを読んで()、各バイトのハードディスクのアクセス時間、低効率をお読みください。ファイルが大きすぎる場合には、操作が非常に便利ではありません。バッファオブジェクトを作成するときに、我々は、使用バッファキャッシュフローに必要なので、それはバッファの配列を作成します。私たちは、ハード・ディスク・リード・バッファで始まるファイルを読み込むとき、出力は直接緩衝地帯から、より効率的になることができます。

  • BufferedInputStreamはBufferedInputStreamをを作成する別の入力ストリームに機能を追加すると、それは内部バッファ配列を作成します
  • 出力ストリームの下にバイトを書き込むことができますバッファリングされた出力ストリームアプリケーションを実現するなBufferedOutputStream

例:使用にBufferedInputStreamは、ファイルのコピーやなBufferedOutputStreamを実装しました

import java.io.*;
public class Solution {
    public static void main(String[] args) throws IOException {
        File file = new File("bit.txt");
        if (!file.isFile()) {
            return;
        }
        BufferedInputStream bfis = new BufferedInputStream(new FileInputStream(file));
        BufferedOutputStream bfos = new BufferedOutputStream(new
                FileOutputStream("D:\\bit" + file.getName()));//copy到src目录下
        byte bytes[] = new byte[1024];
        int temp = 0; //边读边写
        while ((temp = bfis.read(bytes)) != -1) {//读
            bfos.write(bytes, 0, temp); //写
        }
        bfos.flush();
        bfos.close();
        bfis.close();
        System.out.println("copy成功!");
    }
}

文字ストリーム

1、文字ストリームのFileReaderをとてFileWriter

  • あなたは、ファイルの内容を読めば、あなたは直接のサブクラスを使用することができますFileReaderの
  • あなたは、ファイルへの書き込みをしている場合は、サブクラスてFileWriterを使用する必要があります

ファイルのコピー

import java.io.*;
public class Solution {
    public static void main(String[] args) throws IOException {
        //创建输入流对象
        FileReader fr = new FileReader("D:\\bit\\bitSrc.java");
        //创建输出流对象
        FileWriter fw = new FileWriter("D:\\bit\\bitCopy.java");
        //读写数据
        int ch;
        while((ch=fr.read())!=-1) {
            fw.write(ch);
        }
        //释放资源
        fw.close();
        fr.close();
    }
}

ここに画像を挿入説明
2、文字やバッファフローBufferedReaderのBufferedWriterの

文字ストリームの読み取りの効率を向上させるために、バッファリング機構が導入され、一括読み取りと書き込み文字、単一文字の読み書きの効率を向上させます。

  • のスピードを加速するために使用される文字を読むことをBufferedReader
  • 書き込み速度を加速するために使用BufferedWriterの
import java.io.*;
public class Solution {
    public static void main(String[] args) throws IOException {
        FileReader reader=new FileReader("D:\\Ideaproject\\bit.txt");
        BufferedReader bReader=new BufferedReader(reader);
        FileWriter writer=new FileWriter("D:\\Ideaproject\\bit2.txt");
        BufferedWriter bWriter=new BufferedWriter(writer);
        String content="";
        //readLine一行一行的读取
        while((content=bReader.readLine())!=null){
        //\r\n换行
            bWriter.write(content+"\r\n");
        }
        /**
         * 关闭流的顺序:
         * 当A依赖B的时候先关闭A,再关闭B
         * 带缓冲的流最后关闭的时候会执行一次flush
         */
        reader.close();
        bReader.close();
        bWriter.close();
        writer.close();
    }
}

ここに画像を挿入説明

比較バイト文字ストリームの流れ

バイトストリーム 文字ストリーム
基本単位はバイトであります 基本的な単位は、Unicodeのシンボルであります
いいえ、それ自体が直接操作するファイルをバッファ 使用中バッファ
リソース(Closeメソッド)閉じられていない、出力することができます それを使用しない閉じる方法、出力しません

文字バイトストリーム変換

OutputStreamWriter和にInputStreamReader

  • 読者にInputStreamReaderは、文字ストリームに入力バイトストリームのサブクラスであります
  • ライターのOutputStreamWriterは、バイトストリームへの出力文字ストリームのサブクラスであります
import java.io.*;
public class Solution {
    public static void main(String[] args) {
        // 创建字节流对象 System.in 代表从控制台输入
        InputStream in = System.in;
        // 创建字符流对象
        BufferedWriter bw = null;
        BufferedReader br = null;
        try {
            // 实例化字符流对象 通过 InputStreamReader 将字节输入流转化成字符输入流
            br = new BufferedReader(new InputStreamReader(in));
            //br = new BufferedReader(new InputStreamReader(in,"GBK"));
            bw = new BufferedWriter(new FileWriter("a.txt"));
            // 定义读取数据的行
            String line = null;
            // 读取数据
            while ((line = br.readLine()) != null) {
                // 如果输入的是"exit"就退出
                if ("exit".equals(line)) {
                    break;
                }
                // 将数据写入文件
                bw.write(line);
                // 写入新的一行
                bw.newLine();
                // 刷新数据缓冲
                bw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            try {
                if (bw != null)
                    bw.close();
                if (br != null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
import java.io.*;
public class Solution {
    public static void main(String[] args) {
        // 定义字节输出流的对象System.out
        OutputStream out = System.out;
        // 定义字符流的对象
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //通过OutputStreamWriter将字符转流换为字节流对象
            bw = new BufferedWriter(new OutputStreamWriter(out));
            //bw = new BufferedWriter(new OutputStreamWriter(out,"GBK"));
            br = new BufferedReader(new FileReader("a.txt"));
            // 定义读取行的字符串
            String line = null;
            // 读取数据
            while ((line = br.readLine()) != null) {
                // 输出到控制台
                bw.write(line);
                // 新的一行
                bw.newLine();
                // 刷新缓冲
                bw.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (bw != null)
                    bw.close();
                if (br != null)
                    br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
公開された60元の記事 ウォン称賛23 ビュー3304

おすすめ

転載: blog.csdn.net/weixin_44945537/article/details/104541439