最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java字節(jié)流、字符流與轉(zhuǎn)換流過程

 更新時(shí)間:2024年10月06日 15:04:33   作者:海波booy  
輸入輸出流(IO流)是數(shù)據(jù)傳輸?shù)某橄蟾拍?用于表示數(shù)據(jù)在設(shè)備間的傳輸過程,IO流按數(shù)據(jù)類型分為字符流和字節(jié)流,按數(shù)據(jù)流向分為輸入流和輸出流,字節(jié)流操作單個(gè)字節(jié),字符流操作字符,在實(shí)際應(yīng)用中,非文本文件多用字節(jié)流操作

IO流概述

IO流: 輸入輸出流(Input/Output)

  • 流是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流
  • 流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類,方便更直觀的進(jìn)行數(shù)據(jù)操作。

IO流的分類

  • 根據(jù)處理數(shù)據(jù)類型的不同分為:字符流和字節(jié)流
  • 根據(jù)數(shù)據(jù)流向不同分為:輸入流(讀文件)和輸出流(寫文件)

字節(jié)流

字節(jié)輸出流

OutputStream類定義

public abstract class OutputStream extends Object implements Closeable,Flushable

此抽象類是表示輸出字節(jié)流的所有類的超類。輸出流接受輸出字節(jié)并將這些字節(jié)發(fā)送到InputSream類某個(gè)接收器要向文件中輸出,使用FileOutputStream類

字節(jié)輸入流

InputSream類定義

public abstract class InputStream extends Object implements Closeable

此抽象類便是字節(jié)輸入流的所有類的超類。

FileInputStream從文件系統(tǒng)中的某個(gè)文件中獲取輸入字節(jié)

實(shí)例代碼:

package com.booy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class ByteStreamDemo {
	//讀文件
	public static void In() {
		//確定要寫入的目標(biāo)文件
		File file = new File("D:\\test\\test.txt");
		//構(gòu)建一個(gè)文件輸入流對象
		try {
			InputStream in = new FileInputStream(file);
			
			//把文件內(nèi)容讀出到程序中
			byte[] bytes = new byte[1024];
			StringBuilder buf = new StringBuilder();
			int len = -1;//表示每次讀取的字節(jié)長度
			//把數(shù)據(jù)讀入到數(shù)組中,并返回讀取的字節(jié)數(shù),當(dāng)不等于-1時(shí),表示讀取到數(shù)據(jù),等于-1表示文件已經(jīng)讀完
			while((len=in.read(bytes))!=-1) {
				//根據(jù)讀取到的字節(jié)數(shù)組,再轉(zhuǎn)換為字符串內(nèi)容,添加到StringBuilder中
				buf.append(new String(bytes));
			}	
			//測試打印
			System.out.println("文件讀入成功:"+buf);
			//關(guān)閉流
			in.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//寫文件
	public static void Out() {
		//確定要輸出的目標(biāo)文件
		File file = new File("D:\\test\\test.txt");
		
		//構(gòu)建一個(gè)文件輸出流對象
		try {
			OutputStream out = new FileOutputStream(file,true);//true不寫為替換
			//輸出的內(nèi)容
			String info = "小橋流水人家\r\t";
			//把內(nèi)容寫入到文件中
			out.write(info.getBytes());
			//關(guān)閉流
			out.close();
			System.out.println("文件寫入成功!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		Out();
		In();		
	}
}
/**
運(yùn)行結(jié)果:
文件寫入成功!
文件讀入成功: 小橋流水人家
	小橋流水人家
*/

原理:

  • 輸入/輸出字節(jié)流操作原理,每次只會(huì)操作一個(gè)字節(jié)(從文件中讀取或?qū)懭耄?/li>
  • 字節(jié)操作流:默認(rèn)每次執(zhí)行寫入操作會(huì)把數(shù)據(jù)直接寫入文件

字符流

Writer

  • 寫入字符流的抽象類。子類必須實(shí)現(xiàn)的方法僅有write(char[],int,int)、flush()和close()。但是,多數(shù)子類將重寫此處定義的一些方法,以提供更高的效率和/或其他功能。
  • 與OutputString一樣,對文件的操作使用:FileWrite類完成。

Reader

  • 用于讀取字符流的抽象類。子類必須實(shí)現(xiàn)的方法只有read(char[],int,int)和close()。但是,多數(shù)子類將重寫此處定義的一些方法,以提供更高的效率和/或其他功能。
  • 使用FileReader類進(jìn)行實(shí)例化操作。

文件字符流會(huì)自帶緩存,默認(rèn)大小為1024字節(jié),在緩存滿后,或手動(dòng)刷新緩存,或關(guān)閉流時(shí)會(huì)把數(shù)據(jù)寫入文件中

如何選擇使用字節(jié)流還是字符流:

  • 一般情況操作非文本文件時(shí),使用字節(jié)流,操作文本文件使用字符流
  • 字符流的內(nèi)部實(shí)現(xiàn)還是字節(jié)流

實(shí)例代碼:

package com.booy;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class CharStreamtDemo {

	public static void main(String[] args) {
		Out();
		In();
	}
	private static void In() {
		File file = new File("D:\\test\\test.txt");
		try {
			Reader in = new FileReader(file);
			
			char[] cs = new char[1];
			StringBuilder sbl = new StringBuilder();
			int len = -1;
			while((len=in.read(cs))!=-1) {
				sbl.append(cs, 0, cs.length);
			}
			System.out.println(sbl);
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private static void Out() {
		File file = new File("D:\\test\\test.txt");
		try {
			Writer out = new FileWriter(file,true);
			out.write(",古道西風(fēng)瘦馬");
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
/**
運(yùn)行結(jié)果:
 小橋流水人家,古道西風(fēng)瘦馬
*/

代碼實(shí)例:

指定一個(gè)盤符下的文件,將該文件復(fù)制到到指定的目錄下

文件的復(fù)制:從一個(gè)輸入流讀取數(shù)據(jù),然后通過輸出流寫入目標(biāo)位置

package com.booy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFileDemo {
	public static void main(String[] args) {
		copy("D:\\test\\1.jpg","D:\\test\\my\\1.jpg");
	}
	private static void copy(String src,String target) {
		File srcFile = new File(src);
		File targetFile = new File(target);
		InputStream in =null;
		OutputStream out =null;
		try {
			in =new FileInputStream(srcFile);
			out =new FileOutputStream(targetFile);
			
			byte[] bytes = new byte[1024];
			int len = -1;
			while((len=in.read(bytes))!=-1) {
				out.write(bytes, 0, len);
			}			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			try {
				if(in!=null)in.close();
				if(out!=null)out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

字節(jié)字符轉(zhuǎn)換流

轉(zhuǎn)換流,可以將一個(gè)字節(jié)流轉(zhuǎn)換為字符流,也可以將一個(gè)字符流轉(zhuǎn)換為字節(jié)流

  • OutputStreamWriter: 可以將輸出的字符流轉(zhuǎn)換為字節(jié)流的輸出形式
  • InputStreamReader: 將輸入的字節(jié)流轉(zhuǎn)換為字符流輸入形式

實(shí)例代碼:

package com.booy;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;

public class ChangerStringDemo {

	public static void main(String[] args) throws FileNotFoundException {
		//InputStream in = new FileInputStream("D:\\test\\test.txt");
		//read(in);
		OutputStream out = new FileOutputStream("D:\\test\\test.txt");
		writer(out);
	}
	private static void read(InputStream in) {
		Reader reader = new InputStreamReader(in,Charset.defaultCharset());
		
		char[] cs = new char[1024];
		int len = -1;
		try {
			while((len=reader.read(cs))!=-1) {
				System.out.println(new String(cs,0,len));
			}
			cs.clone();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private static void writer(OutputStream out) {
		Writer writ = new OutputStreamWriter(out,Charset.defaultCharset());
		try {
			writ.write("夕陽西下,斷腸人在天涯");
			writ.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SSH框架網(wǎng)上商城項(xiàng)目第12戰(zhàn)之添加和更新商品功能

    SSH框架網(wǎng)上商城項(xiàng)目第12戰(zhàn)之添加和更新商品功能

    這篇文章主要介紹了SSH框架網(wǎng)上商城項(xiàng)目第12戰(zhàn)之添加和更新商品功能的實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java Optional實(shí)踐(小結(jié))

    Java Optional實(shí)踐(小結(jié))

    這篇文章主要介紹了Java Optional實(shí)踐(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java輸入輸出流實(shí)例詳解

    Java輸入輸出流實(shí)例詳解

    這篇文章主要介紹了Java輸入輸出流,結(jié)合實(shí)例形式詳細(xì)分析了Java常見的輸入輸出常用操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-09-09
  • springcloud config配置讀取優(yōu)先級(jí)過程詳解

    springcloud config配置讀取優(yōu)先級(jí)過程詳解

    這篇文章主要介紹了springcloud config配置讀取優(yōu)先級(jí)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java將excel轉(zhuǎn)為pdf的方法步驟

    java將excel轉(zhuǎn)為pdf的方法步驟

    之前工作需要,查了挺多種Excel轉(zhuǎn)PDF的方法,下面這篇文章主要給大家介紹了關(guān)于java將excel轉(zhuǎn)為pdf的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java二維數(shù)組查找功能代碼實(shí)現(xiàn)

    Java二維數(shù)組查找功能代碼實(shí)現(xiàn)

    這篇文章主要介紹了Java二維數(shù)組查找功能代碼實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 解決logback-classic 使用testCompile的打包問題

    解決logback-classic 使用testCompile的打包問題

    這篇文章主要介紹了解決logback-classic 使用testCompile的打包問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Synchronized?和?ReentrantLock?的實(shí)現(xiàn)原理及區(qū)別

    Synchronized?和?ReentrantLock?的實(shí)現(xiàn)原理及區(qū)別

    這篇文章主要介紹了Synchronized?和?ReentrantLock?的實(shí)現(xiàn)原理及區(qū)別,文章為榮啊主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot定時(shí)監(jiān)聽RocketMQ的NameServer問題及解決方案

    SpringBoot定時(shí)監(jiān)聽RocketMQ的NameServer問題及解決方案

    這篇文章主要介紹了SpringBoot定時(shí)監(jiān)聽RocketMQ的NameServer問題及解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • 合并有序數(shù)組的實(shí)現(xiàn)(java與C語言)

    合并有序數(shù)組的實(shí)現(xiàn)(java與C語言)

    這篇文章主要介紹了合并有序數(shù)組的實(shí)現(xiàn)(java與C語言)的相關(guān)資料,這里對有序數(shù)組的合并分享了java版本和C語言版本的示例,需要的朋友可以參考下
    2017-08-08

最新評論

青神县| 鸡泽县| 武夷山市| 渭南市| 延安市| 长乐市| 平罗县| 南乐县| 区。| 罗城| 承德市| 龙泉市| 南靖县| 永定县| 北京市| 无锡市| 土默特右旗| 高青县| 高邑县| 灵武市| 井冈山市| 台北县| 阳朔县| 始兴县| 理塘县| 濮阳市| 辽阳县| 嘉峪关市| 肥乡县| 如皋市| 盐源县| 龙门县| 汝州市| 白城市| 福海县| 通江县| 建阳市| 合川市| 太和县| 辽阳市| 通州市|