`

java学习四(字节流与字符流)

    博客分类:
  • java
阅读更多
    什么是字节流和字符流,两者有什么区别,什么情况下使用哪种流?一直比较迷惑,今天查资料找到些答案,仅做记录。
    stream结尾都是字节流,reader和writer结尾都是字符流。
    两者的区别就是读写的时候一个是按字节读写,一个是按字符。字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
        @Test
	public void test1() throws IOException{
		System.out.println("this is SuiteTest1.test1");
		// 第1步:使用File类找到一个文件    
	     File f = new File("d:" + File.separator + "test.txt"); // 声明File  对象    
	// 第2步:通过子类实例化父类对象    
	     OutputStream out = null;
	     String str = "Hello World!!!";  
	     byte b[] = str.getBytes();
	// 准备好一个输出的对象    
	     try {
		 out = new FileOutputStream(f);
	    	 out.write(b);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	 // 第4步:关闭输出流  
	    // out.close();                  
	// 此时没有关闭 
	}

此时没有关闭字节流操作,但是文件中也依然存在了输出的内容,证明字节流是直接操作文件本身的。

        @Test
	public void test1() throws IOException{
		System.out.println("this is SuiteTest1.test1");
		// 第1步:使用File类找到一个文件    
	     File f = new File("d:" + File.separator + "test.txt"); // 声明File  对象    
	// 第2步:通过子类实例化父类对象  
	     Writer out = null;
	     String str = "Hello World!!!";
	// 准备好一个输出的对象    
	     try {
	    	  out = new FileWriter(f); 
		  out.write(str); 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	 // 第4步:关闭输出流 
	    // out.close();                  
	// 此时没有关闭 
	}

    程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
@Test
	public void test1() throws IOException{
		System.out.println("this is SuiteTest1.test1");
		// 第1步:使用File类找到一个文件    
	     File f = new File("d:" + File.separator + "test.txt"); // 声明File  对象    
	// 第2步:通过子类实例化父类对象    
	     //OutputStream out = null;  
	     Writer out = null;
	     String str = "Hello World!!!";  
	     //byte b[] = str.getBytes();
	// 准备好一个输出的对象    
	     try {
			//out = new FileOutputStream(f);
	    	//out.write(b);
	    	 out = new FileWriter(f); 
			 out.write(str); 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	 // 第4步:关闭输出流或者flush强制清空缓冲区    
	     out.flush();
	    //out.close();             
	}

    查看test.txt文件已写入内容,证明close或者flush都会将字符流写入文件。

    在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。

    java.io.Reader 和 java.io.InputStream 组成了Java 输入类。
    Reader 用于读入16位字符,也就是Unicode 编码的字符;而InputStream用于读入 ASCII 字符和二进制数据。
    Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。
    Reader和InputStream分别是I/O库提供的两套平行独立的等级机构。
    1byte = 8bits
    InputStream、OutputStream是用来处理8位元的流,Reader、Writer是用来处理16位元的流。
    而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
    值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配、由OutputStream到Writer的适配。转换例子:InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\demo.txt"));/
    在Java中,有不同类型的 Reader 输入流对应于不同的数据源:
    FileReader 用于从文件输入;CharArrayReader 用于从程序中的字符数组输入;StringReader用于从程序中的字符串输入;PipedReader 用于读取从另一个线程中的PipedWriter 写入管道的数据。
    相应的也有不同类型的 InputStream 输入流对应于不同的数据源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。
    另外,还有两种没有对应 Reader 类型的 InputStream 输入流: Socket 用于套接字; URLConnection 用于 URL 连接。 这两个类使用 getInputStream() 来读取数据。
    相应的,java.io.Writer 和 java.io.OutputStream 也有类似的区别。

   
分享到:
评论

相关推荐

    Java字符流与字节流区别

    Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流...

    JAVA 字符流与字节流

    在Java编程语言中,输入/输出(I/O)操作是处理数据流的关键部分,而字符流与字节流则是实现这些操作的两种基本方式。理解它们的区别和应用场景对于任何Java开发者来说都是至关重要的。 ### 字节流 字节流是最基本...

    Java字符流和字节流

    ### Java字符流和字节流详解 #### 一、引言 在Java中,I/O流主要用于处理输入输出操作,包括文件读写等。根据处理数据类型的不同,Java I/O流主要分为字节流和字符流两大类。字节流处理的是8位的字节数据,而字符流...

    Java字节流与字符流的介绍.pdf

    Java 字节流与字符流的介绍 Java 中的流操作可以分为两种:字节流和字符流。字节流是指以 byte 为单位进行读写操作的流,而字符流是指以 char 为单位进行读写操作的流。 字节流的介绍 字节流的所有读操作都继承自...

    java字节流和字符流

    Java中的字节流和字符流是IO操作中的两种基本类型,它们主要用于数据的输入和输出。字节流处理的数据单位是字节,而字符流处理的是Unicode字符。 字节流: 字节流主要由两个核心类构成:`InputStream`和`...

    Java IO 字节流 字符流

    Java IO系统分为两大类:字节流和字符流。字节流主要用于处理任何类型的原始数据,如图片、音频文件或者二进制文件,而字符流则专注于处理基于文本的数据。本文将深入探讨这两类流的原理、用途以及它们之间的关联。 ...

    Java IO字符流和字节流

    ### Java IO字符流和字节流详解 #### 一、引言 在Java编程中,输入输出(简称IO)操作是十分重要的一个方面。通过IO操作,我们可以读取文件、网络数据、用户输入等,也可以将数据写入到文件、网络、控制台等。Java...

    java字节流和字符流[整理].pdf

    转换流:在字节流和字符流之间,Java提供了解决两者不兼容问题的转换流,即InputStreamReader和OutputStreamWriter。InputStreamReader是字节输入流到字符输入流的桥梁,而OutputStreamWriter则是字节输出流到字符...

    Java基础11-(字节流、字符流)

    在学习Java基础时,掌握字节流和字符流是必不可少的。字节流主要包括OutputStream和InputStream两个基类,它们分别是所有字节输出流和输入流的超类。字符流则包括Writer和Reader两个基类,用于实现字符数据的读写。 ...

    JAVA_字节流和字符流

    在Java编程语言中,字节流(Byte Stream)和字符流(Character Stream)是处理输入输出数据的两种基本方式。字节流主要用于处理任何类型的二进制数据,如图片、音频、视频等,而字符流则专为处理基于Unicode编码的...

    java 字节与字符流,字符流转换

    java 字节与字符流,字符流转换

    JavaIO实例_字节流_字符流_缓冲流_转换流IODemo

    在Java中,IO流分为两大类:字节流和字符流,每种流又有输入流和输出流之分,分别用于数据的读取和写入。 1. **字节流**: - 字节流处理的是8位的字节数据,是最基本的流类型。Java中的`InputStream`和`...

    字节流字符流

    通过阅读和理解这些代码,我们可以深入学习如何在Java中运用字节流和字符流进行文件操作,以及如何在需要时进行两者之间的转换。 总的来说,字节流和字符流是Java I/O系统的重要组成部分,理解它们的工作原理和应用...

    Java实现字节流与图片的转化

    在Java编程中,字节流(Byte Stream)是处理数据的基本方式,特别是在处理二进制数据,如图片、音频或视频文件时。本教程将详细讲解如何使用Java实现字节流来转换和处理图片。 首先,我们需要理解字节流的概念。在...

    java.字节流与字符流(解决方案).md

    java.字节流与字符流(解决方案).md

    Java 字节流、字符流题目.docx

    Java的输入和输出主要涉及到流的...总的来说,这个实验旨在帮助学习者理解Java中字节流和字符流的基本概念和用法,包括文件的读写、字符与字节的转换以及流的层次结构。通过实践这些练习,可以深入掌握Java的I/O操作。

    IO流学习(字节流 字符流 文本流)!

    总的来说,IO流是Java编程中不可或缺的一部分,理解和熟练运用字节流、字符流和文本流能帮助我们高效地处理数据输入和输出,为各种复杂的应用场景提供支持。在实际开发中,要根据数据类型和需求选择合适的流,并利用...

    Java 字节流、字符流题目.pdf

    在Java中,流分为字节流和字符流两大类,它们都是抽象的概念,用于表示数据流动的方向。字节流处理的数据单位是字节,而字符流处理的是Unicode编码的字符。 一、字节流 字节流分为输入流和输出流,Java中最基础的...

Global site tag (gtag.js) - Google Analytics