欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中字節(jié)流和字符流的區(qū)別與聯(lián)系

 更新時(shí)間:2024年12月05日 16:43:19   作者:路西法98  
Java中的字節(jié)流和字符流是用于處理輸入和輸出的兩種不同的流,本文主要介紹了Java中字節(jié)流和字符流的區(qū)別與聯(lián)系,字節(jié)流以字節(jié)為單位進(jìn)行讀寫,適用于處理二進(jìn)制數(shù)據(jù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

字節(jié)流和字符流的區(qū)別與聯(lián)系

Java中的字節(jié)流和字符流是用于處理輸入和輸出的兩種不同的流。

區(qū)別

1. 數(shù)據(jù)類型:字節(jié)流以字節(jié)為單位進(jìn)行讀寫,而字符流以字符為單位進(jìn)行讀寫。字節(jié)流可以處理任意類型的數(shù)據(jù),包括文本、圖像、音頻等,而字符流主要用于處理文本數(shù)據(jù)。

2. 編碼方式:字節(jié)流是以字節(jié)的形式直接讀寫數(shù)據(jù),不關(guān)心數(shù)據(jù)的具體編碼方式。而字符流是以字符的形式讀寫數(shù)據(jù),會(huì)根據(jù)指定的字符編碼將字符轉(zhuǎn)換為字節(jié)進(jìn)行處理。

3. 處理效率:字節(jié)流的處理效率通常比字符流高,因?yàn)樽止?jié)流直接操作底層的字節(jié)數(shù)據(jù),不需要進(jìn)行字符編碼的轉(zhuǎn)換。

4. 使用場景:字節(jié)流適用于處理二進(jìn)制數(shù)據(jù),如文件的復(fù)制、網(wǎng)絡(luò)傳輸?shù)?。字符流適用于處理文本數(shù)據(jù),如文件的讀寫、文本的處理等。

聯(lián)系

1. 繼承關(guān)系:字節(jié)流和字符流都是抽象類InputStream和OutputStream的子類,以及Reader和Writer的子類。
2. 使用方式:字節(jié)流和字符流都提供了類似的讀寫方法,如read()和write()方法。
3. 轉(zhuǎn)換:可以通過InputStreamReader和OutputStreamWriter類將字節(jié)流轉(zhuǎn)換為字符流,以便處理文本數(shù)據(jù)。
4. 字符流是建立在字節(jié)流的基礎(chǔ)上的。在字符流中,使用了字符編碼來處理字符數(shù)據(jù),而字符編碼又是通過字節(jié)流來實(shí)現(xiàn)的。因此,字符流可以看作是字節(jié)流的高級(jí)封裝,提供了更方便的字符處理功能。

字節(jié)流相關(guān)的類:

1. InputStream:所有字節(jié)輸入流的超類。

2. FileInputStream:從文件中讀取數(shù)據(jù)的輸入流。

3. BufferedInputStream:帶有緩沖區(qū)的輸入流,提高讀取效率。

4. DataInputStream:可以從輸入流中讀取Java基本數(shù)據(jù)類型的輸入流。

5. ObjectInputStream:可以從輸入流中讀取Java對(duì)象的輸入流。

6. OutputStream:所有字節(jié)輸出流的超類。

7. FileOutputStream:向文件中寫入數(shù)據(jù)的輸出流。

8. BufferedOutputStream:帶有緩沖區(qū)的輸出流,提高寫入效率。

9. DataOutputStream:可以向輸出流中寫入Java基本數(shù)據(jù)類型的輸出流。

10. ObjectOutputStream:可以向輸出流中寫入Java對(duì)象的輸出流。

11. ByteArrayInputStream:是一個(gè)輸入流,它從一個(gè)字節(jié)數(shù)組中讀取數(shù)據(jù)

12. ByteArrayOutputStream:是一個(gè)輸出流,它將數(shù)據(jù)寫入一個(gè)字節(jié)數(shù)組中。

字符流相關(guān)的類:

1. Reader:所有字符輸入流的超類。

2. FileReader:從文件中讀取字符的輸入流。

3. BufferedReader:帶有緩沖區(qū)的輸入流,提高讀取效率。

4. InputStreamReader:將字節(jié)流轉(zhuǎn)換為字符流的輸入流。

5. Writer:所有字符輸出流的超類。

6. FileWriter:向文件中寫入字符的輸出流。

7. BufferedWriter:帶有緩沖區(qū)的輸出流,提高寫入效率。

8. OutputStreamWriter:將字符流轉(zhuǎn)換為字節(jié)流的輸出流。

字節(jié)流相關(guān)的類示例代碼

InputStream示例代碼:

InputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read();
while (data != -1) {
    System.out.print((char) data);
    data = inputStream.read();
}
inputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸入流,讀取了文件中的每一個(gè)字節(jié),并將其轉(zhuǎn)換為字符輸出到控制臺(tái)上。最后關(guān)閉了輸入流。

FileInputStream示例代碼:

FileInputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read();
while (data != -1) {
    System.out.print((char) data);
    data = inputStream.read();
}
inputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸入流,讀取了文件中的每一個(gè)字節(jié),并將其轉(zhuǎn)換為字符輸出到控制臺(tái)上。最后關(guān)閉了輸入流。

BufferedInputStream示例代碼:

InputStream inputStream = new FileInputStream("example.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int data = bufferedInputStream.read();
while (data != -1) {
    System.out.print((char) data);
    data = bufferedInputStream.read();
}
bufferedInputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸入流,并將其包裝在一個(gè)帶有緩沖區(qū)的輸入流中。讀取了文件中的每一個(gè)字節(jié),并將其轉(zhuǎn)換為字符輸出到控制臺(tái)上。最后關(guān)閉了輸入流。

DataInputStream示例代碼:

InputStream inputStream = new FileInputStream("example.txt");
DataInputStream dataInputStream = new DataInputStream(inputStream);
int data = dataInputStream.readInt();
System.out.println(data);
dataInputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸入流,并將其包裝在一個(gè)可以讀取Java基本數(shù)據(jù)類型的輸入流中。讀取了文件中的一個(gè)整數(shù),并將其輸出到控制臺(tái)上。最后關(guān)閉了輸入流。

ObjectInputStream示例代碼:

InputStream inputStream = new FileInputStream("example.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Object object = objectInputStream.readObject();
System.out.println(object);
objectInputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸入流,并將其包裝在一個(gè)可以讀取Java對(duì)象的輸入流中。讀取了文件中的一個(gè)對(duì)象,并將其輸出到控制臺(tái)上。最后關(guān)閉了輸入流。

OutputStream示例代碼:

OutputStream outputStream = new FileOutputStream("example.txt");
String data = "Hello, world!";
outputStream.write(data.getBytes());
outputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸出流,將一個(gè)字符串轉(zhuǎn)換為字節(jié)數(shù)組,并將其寫入到文件中。最后關(guān)閉了輸出流。

FileOutputStream示例代碼:

FileOutputStream outputStream = new FileOutputStream("example.txt");
String data = "Hello, world!";
outputStream.write(data.getBytes());
outputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸出流,將一個(gè)字符串轉(zhuǎn)換為字節(jié)數(shù)組,并將其寫入到文件中。最后關(guān)閉了輸出流。

BufferedOutputStream示例代碼:

OutputStream outputStream = new FileOutputStream("example.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
String data = "Hello, world!";
bufferedOutputStream.write(data.getBytes());
bufferedOutputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸出流,并將其包裝在一個(gè)帶有緩沖區(qū)的輸出流中。將一個(gè)字符串轉(zhuǎn)換為字節(jié)數(shù)組,并將其寫入到文件中。最后關(guān)閉了輸出流。

DataOutputStream示例代碼:

OutputStream outputStream = new FileOutputStream("example.txt");
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
int data = 42;
dataOutputStream.writeInt(data);
dataOutputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸出流,并將其包裝在一個(gè)可以寫入Java基本數(shù)據(jù)類型的輸出流中。將一個(gè)整數(shù)寫入到文件中。最后關(guān)閉了輸出流。

ObjectOutputStream示例代碼:

OutputStream outputStream = new FileOutputStream("example.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
Object object = new Object();
objectOutputStream.writeObject(object);
objectOutputStream.close();

這段代碼創(chuàng)建了一個(gè)文件輸出流,并將其包裝在一個(gè)可以寫入Java對(duì)象的輸出流中。將一個(gè)對(duì)象寫入到文件中。最后關(guān)閉了輸出流。

ByteArrayInputStream示例代碼:

byte[] byteArray = {1, 2, 3, 4, 5};
ByteArrayInputStream inputStream = new ByteArrayInputStream(byteArray);
int data;
while ((data = inputStream.read()) != -1) {
    System.out.println(data);
}

創(chuàng)建了一個(gè)ByteArrayInputStream對(duì)象,將一個(gè)字節(jié)數(shù)組傳遞給它。然后我們使用while循環(huán)從輸入流中讀取數(shù)據(jù),并在控制臺(tái)上打印出來。

ByteArrayOutputStream示例代碼:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
outputStream.write(1);
outputStream.write(2);
outputStream.write(3);
outputStream.write(4);
outputStream.write(5);
byte[] byteArray = outputStream.toByteArray();
System.out.println(Arrays.toString(byteArray));

創(chuàng)建了一個(gè)ByteArrayOutputStream對(duì)象,并使用write方法向它寫入數(shù)據(jù)。最后,我們使用toByteArray方法將數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組,并在控制臺(tái)上打印出來。

擴(kuò)展:

ByteArrayInputStream和ObjectInputStream的關(guān)系,并給出ByteArrayInputStream和ObjectInputStream結(jié)合使用的示例代碼

ByteArrayInputStream和ObjectInputStream都是Java IO庫中的輸入流類,用于從字節(jié)數(shù)組和對(duì)象流中讀取數(shù)據(jù)。它們的關(guān)系是,ObjectInputStream是建立在ByteArrayInputStream之上的,即ObjectInputStream需要一個(gè)InputStream對(duì)象作為參數(shù)來初始化,而ByteArrayInputStream正好是一種InputStream對(duì)象。

下面是一個(gè)示例代碼,演示如何使用ByteArrayInputStream和ObjectInputStream結(jié)合使用來讀取Java對(duì)象:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class ObjectInputStreamExample {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 創(chuàng)建一個(gè)包含Java對(duì)象的字節(jié)數(shù)組
        byte[] objectBytes = createObjectBytes();
        // 創(chuàng)建一個(gè)ByteArrayInputStream對(duì)象
        ByteArrayInputStream bais = new ByteArrayInputStream(objectBytes);
        // 創(chuàng)建一個(gè)ObjectInputStream對(duì)象,將ByteArrayInputStream對(duì)象作為參數(shù)傳入
        ObjectInputStream ois = new ObjectInputStream(bais);
        // 從ObjectInputStream中讀取Java對(duì)象
        ArrayList<String> list = (ArrayList<String>) ois.readObject();
        // 打印讀取到的Java對(duì)象
        System.out.println(list);
    }
    private static byte[] createObjectBytes() throws IOException {
        ArrayList<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        // 創(chuàng)建一個(gè)ByteArrayOutputStream對(duì)象
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 創(chuàng)建一個(gè)ObjectOutputStream對(duì)象,將ByteArrayOutputStream對(duì)象作為參數(shù)傳入
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        // 將Java對(duì)象寫入ObjectOutputStream中
        oos.writeObject(list);
        // 返回ByteArrayOutputStream中的字節(jié)數(shù)組
        return baos.toByteArray();
    }
}

在上面的示例代碼中,首先通過createObjectBytes方法創(chuàng)建了一個(gè)包含Java對(duì)象的字節(jié)數(shù)組。然后,創(chuàng)建了一個(gè)ByteArrayInputStream對(duì)象,并將這個(gè)字節(jié)數(shù)組作為參數(shù)傳入。接著,創(chuàng)建了一個(gè)ObjectInputStream對(duì)象,并將ByteArrayInputStream對(duì)象作為參數(shù)傳入。最后,通過ObjectInputStream對(duì)象讀取了Java對(duì)象,并打印出來。

字符流相關(guān)的類示例代碼

Reader示例代碼:

Reader reader = new FileReader("file.txt");
int data = reader.read();
while (data != -1) {
    System.out.print((char) data);
    data = reader.read();
}
reader.close();

代碼含義:創(chuàng)建一個(gè)Reader對(duì)象,使用FileReader將文件"file.txt"作為輸入流。然后使用read()方法讀取字符,并將其打印出來,直到讀取到文件末尾(返回-1)。最后關(guān)閉輸入流。

FileReader示例代碼:

FileReader reader = new FileReader("file.txt");
int data = reader.read();
while (data != -1) {
    System.out.print((char) data);
    data = reader.read();
}
reader.close();

代碼含義:創(chuàng)建一個(gè)FileReader對(duì)象,將文件"file.txt"作為輸入流。然后使用read()方法讀取字符,并將其打印出來,直到讀取到文件末尾(返回-1)。最后關(guān)閉輸入流。

BufferedReader示例代碼:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line = reader.readLine();
while (line != null) {
    System.out.println(line);
    line = reader.readLine();
}
reader.close();

代碼含義:創(chuàng)建一個(gè)BufferedReader對(duì)象,使用FileReader將文件"file.txt"作為輸入流,并帶有緩沖區(qū)。然后使用readLine()方法讀取一行字符,并將其打印出來,直到讀取到文件末尾(返回null)。最后關(guān)閉輸入流。

InputStreamReader示例代碼:

InputStreamReader reader = new InputStreamReader(new FileInputStream("file.txt"), "UTF-8");
int data = reader.read();
while (data != -1) {
    System.out.print((char) data);
    data = reader.read();
}
reader.close();

代碼含義:創(chuàng)建一個(gè)InputStreamReader對(duì)象,使用FileInputStream將文件"file.txt"作為字節(jié)流輸入流,并將其轉(zhuǎn)換為字符流輸入流。指定字符編碼為UTF-8。然后使用read()方法讀取字符,并將其打印出來,直到讀取到文件末尾(返回-1)。最后關(guān)閉輸入流。

Writer示例代碼:

Writer writer = new FileWriter("file.txt");
writer.write("Hello, World!");
writer.close();

代碼含義:創(chuàng)建一個(gè)Writer對(duì)象,使用FileWriter將字符寫入到文件"file.txt"中。然后使用write()方法寫入字符串"Hello, World!"。最后關(guān)閉輸出流。

FileWriter示例代碼:

FileWriter writer = new FileWriter("file.txt");
writer.write("Hello, World!");
writer.close();

代碼含義:創(chuàng)建一個(gè)FileWriter對(duì)象,將字符寫入到文件"file.txt"中。然后使用write()方法寫入字符串"Hello, World!"。最后關(guān)閉輸出流。

BufferedWriter示例代碼:

BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"));
writer.write("Hello, World!");
writer.newLine();
writer.write("This is a new line.");
writer.close();

代碼含義:創(chuàng)建一個(gè)BufferedWriter對(duì)象,使用FileWriter將字符寫入到文件"file.txt"中,并帶有緩沖區(qū)。然后使用write()方法寫入字符串"Hello, World!“,使用newLine()方法寫入一個(gè)新行,再使用write()方法寫入字符串"This is a new line.”。最后關(guān)閉輸出流。

OutputStreamWriter示例代碼:

OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("file.txt"), "UTF-8");
writer.write("Hello, World!");
writer.close();

代碼含義:創(chuàng)建一個(gè)OutputStreamWriter對(duì)象,使用FileOutputStream將字節(jié)流輸出到文件"file.txt"中,并將其轉(zhuǎn)換為字符流輸出流。指定字符編碼為UTF-8。然后使用write()方法寫入字符串"Hello, World!"。最后關(guān)閉輸出流。

到此這篇關(guān)于Java中字節(jié)流和字符流的區(qū)別與聯(lián)系的文章就介紹到這了,更多相關(guān)java 字節(jié)流河字符流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot詳解RocketMQ實(shí)現(xiàn)消息發(fā)送與接收流程

    Springboot詳解RocketMQ實(shí)現(xiàn)消息發(fā)送與接收流程

    這篇文章主要介紹了SpringBoot整合RocketMQ實(shí)現(xiàn)消息發(fā)送和接收功能,我們使用主流的SpringBoot框架整合RocketMQ來講解,使用方便快捷,本文分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 使用String轉(zhuǎn)換到Map結(jié)構(gòu)

    使用String轉(zhuǎn)換到Map結(jié)構(gòu)

    這篇文章主要介紹了使用String轉(zhuǎn)換到Map結(jié)構(gòu),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java顯示當(dāng)前美國洛杉磯時(shí)間

    java顯示當(dāng)前美國洛杉磯時(shí)間

    這篇文章主要介紹了java顯示當(dāng)前美國洛杉磯時(shí)間的方法,也就是當(dāng)前時(shí)間的切換,需要的朋友可以參考下
    2014-02-02
  • Java實(shí)現(xiàn)快速冪算法詳解

    Java實(shí)現(xiàn)快速冪算法詳解

    快速冪是用來解決求冪運(yùn)算的高效方式。此算法偶爾會(huì)出現(xiàn)在筆試以及面試中,特意花時(shí)間研究了下這題,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • Java基礎(chǔ)之Spring5的核心之一IOC容器

    Java基礎(chǔ)之Spring5的核心之一IOC容器

    這篇文章主要介紹了Java基礎(chǔ)之Spring5的核心之一IOC容器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot集成itext導(dǎo)出PDF的過程

    SpringBoot集成itext導(dǎo)出PDF的過程

    本文介紹了如何在Spring Boot中集成iText庫導(dǎo)出PDF文件,并解決中文亂碼問題,步驟包括添加依賴、準(zhǔn)備字體、打開系統(tǒng)字體目錄選擇字體、在控制器中新增方法、創(chuàng)建并測試UserPdfExportService類,以及添加請求頭,感興趣的朋友一起看看吧
    2024-11-11
  • 淺談servlet中的request與response

    淺談servlet中的request與response

    下面小編就為大家?guī)硪黄獪\談servlet中的request與response。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參加。一起跟隨小編過來看看吧
    2016-07-07
  • 解決spring?data?jpa?saveAll()?保存過慢問題

    解決spring?data?jpa?saveAll()?保存過慢問題

    這篇文章主要介紹了解決spring?data?jpa?saveAll()保存過慢問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • resubmit漸進(jìn)式防重復(fù)提交框架示例

    resubmit漸進(jìn)式防重復(fù)提交框架示例

    這篇文章主要為大家介紹了resubmit漸進(jìn)式防重復(fù)提交框架示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺談SpringBoot中的@Conditional注解的使用

    淺談SpringBoot中的@Conditional注解的使用

    這篇文章主要介紹了淺談SpringBoot中的@Conditional注解的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04

最新評(píng)論