Java IO流之字符緩沖流實(shí)例詳解
字符流:
1、加入字符緩存流,增強(qiáng)讀取功能(readLine)
2、更高效的讀取數(shù)據(jù)
BufferedReader
從字符輸入流讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取。
FileReader:內(nèi)部使用InputStreamReader,解碼過程,byte->char,默認(rèn)緩存大小為8k
BufferReader:默認(rèn)緩存大小為8k,但可以手動(dòng)指定緩存大小,把數(shù)據(jù)讀取到緩存中,減少每次轉(zhuǎn)換過程,效率更高
/字符輸入緩沖流
private static void charReader() {
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Reader reader = new FileReader(file);
//為字符流提供緩沖,已達(dá)到高效讀取的目的
BufferedReader bufr = new BufferedReader(reader);
char[] chars = new char[1024];
int len = -1;
while((len = bufr.read(chars)) != -1) {
System.out.println(new String(chars,0,len));
}
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedWriter
將文本寫入字符輸出流,緩沖各個(gè)字符,從而提供單個(gè)字符、數(shù)組和字符串的高效寫入
FileWriter:內(nèi)部使用InputStreamWriter,解碼過程,byte->char,默認(rèn)緩存大小為8k
BufferWriter:默認(rèn)緩存大小為8k,但可以手動(dòng)指定緩存大小,把數(shù)據(jù)讀取到緩存中,減少每次轉(zhuǎn)換過程,效率更高
//字符輸出緩存流
private static void charWriter() {
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Writer writer = new FileWriter(file,true);//追加
//為字符流提供緩沖,已達(dá)到高效讀取的目的
BufferedWriter bufr = new BufferedWriter(writer);
bufr.write("這里是字符緩沖流\r\n");
bufr.flush();
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
總結(jié):
package com.lemon;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
/**
* 緩存的目的:
* 解決在寫入文件操作時(shí),頻繁的操作文件所帶來的性能降低問題
* BufferedOutputStream內(nèi)部默認(rèn)的緩存大小是8kb,每次寫入時(shí)存儲(chǔ)到緩存中的byte數(shù)組中,當(dāng)數(shù)組存滿時(shí),會(huì)把數(shù)組中的數(shù)據(jù)寫入文件
* 并且緩存下標(biāo)歸零
*
* 字符流:
* 1、加入字符緩存流,增強(qiáng)讀取功能(readLine)
* 2、更高效的讀取數(shù)據(jù)
* FileReader:內(nèi)部使用InputStreamReader,解碼過程,byte->char,默認(rèn)緩存大小為8k
* BufferReader:默認(rèn)緩存大小為8k,但可以手動(dòng)指定緩存大小,把數(shù)據(jù)讀取到緩存中,減少每次轉(zhuǎn)換過程,效率更高
* BufferedWriter:同上
* @author lemonSun
*
* 2019年5月4日下午8:12:53
*/
public class BufferStreamDemo {
public static void main(String[] args) {
// byteWriter();
// byteReader();
// byteReader1();
// charReader();
charWriter();
}
//字符輸出緩存流
private static void charWriter() {
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Writer writer = new FileWriter(file,true);//追加
//為字符流提供緩沖,已達(dá)到高效讀取的目的
BufferedWriter bufr = new BufferedWriter(writer);
bufr.write("這里是字符緩沖流\r\n");
bufr.flush();
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//字符輸入緩存流
private static void charReader() {
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Reader reader = new FileReader(file);
//為字符流提供緩沖,已達(dá)到高效讀取的目的
BufferedReader bufr = new BufferedReader(reader);
char[] chars = new char[1024];
int len = -1;
while((len = bufr.read(chars)) != -1) {
System.out.println(new String(chars,0,len));
}
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//緩存流輸入 不用關(guān)閉 try自動(dòng)關(guān)閉 必須實(shí)現(xiàn)Closeable接口
private static void byteReader1(){
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
//buf作用域在try大括號(hào)里面多條語句try(;),;隔開
try(BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file))) {
byte[] bytes = new byte[1024];
int len = -1;
while((len = buf.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//緩存流輸入
private static void byteReader(){
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字節(jié)輸出流
InputStream in = new FileInputStream(file);
//字節(jié)緩沖流
BufferedInputStream buf = new BufferedInputStream(in);
byte[] bytes = new byte[1024];
int len = -1;
while((len = buf.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
buf.close();//自動(dòng)關(guān)閉 in.close
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//緩存流輸出
private static void byteWriter(){
//目標(biāo)文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字節(jié)輸出流
OutputStream out = new FileOutputStream(file,true);
//緩沖流
BufferedOutputStream buf = new BufferedOutputStream(out);
//內(nèi)容
String info = "這里是緩沖流\r\n";
//寫入
buf.write(info.getBytes());
buf.close(); //jdk1.7以后自動(dòng)關(guān)閉 out
// out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上所述是小編給大家介紹的Java IO流之字符緩沖流詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
使用springBoot中的info等級(jí)通過druid打印sql
這篇文章主要介紹了使用springBoot中的info等級(jí)通過druid打印sql,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java類庫BeanUtils組件使用方法及實(shí)例詳解
這篇文章主要介紹了Java類庫BeanUtils組件使用方法級(jí)實(shí)例詳解,需要的朋友可以參考下2020-02-02
使用Eclipse創(chuàng)建Maven的Java WEB項(xiàng)目的兩種方式
本文詳細(xì)介紹了如何在JDK 1.8、Maven 3.6.3和Eclipse 2017版本下創(chuàng)建Java Web項(xiàng)目,包括選擇archetype方式、配置Tomcat、設(shè)置為Web3.1、配置Maven編譯級(jí)別、修復(fù)Eclipse提示的錯(cuò)誤、設(shè)置Maven源文件夾等步驟,需要的朋友可以參考下2024-11-11
Spring Security源碼解析之權(quán)限訪問控制是如何做到的
Spring Security 中對于權(quán)限控制默認(rèn)已經(jīng)提供了很多了,但是,一個(gè)優(yōu)秀的框架必須具備良好的擴(kuò)展性,下面小編給大家介紹Spring Security源碼解析之權(quán)限訪問控制是如何做到的,感興趣的朋友跟隨小編一起看看吧2021-05-05
如何使用nexus在局域網(wǎng)內(nèi)搭建maven私服及idea的使用
這篇文章主要介紹了如何使用nexus在局域網(wǎng)內(nèi)搭建maven私服及idea的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
Springboot的maven間接依賴的實(shí)現(xiàn)
這篇文章主要介紹了Springboot的maven間接依賴的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法
本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過Java程序獲取IP地址對應(yīng)的城市,需要借助第三方的IP地址庫,下面就來介紹一下,感興趣的可以了解一下2023-10-10
Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析
這篇文章主要介紹了Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

