IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaDay19 管道流,字节流和字符流的区别 -> 正文阅读

[Java知识库]JavaDay19 管道流,字节流和字符流的区别

作者:recommend-item-box type_blog clearfix

1.编程实现:1.1 线程A,从控制台读取用户输入的内容,并且把内容写入到管道流中。1.2 线程B,从管道流中读取内容,并且把内容再写入到一个本地文件中。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
 * @author chouhan
 */
public class PipeTest {
	public static void main(String[] args) {
		PipedOutputStream out = new PipedOutputStream();
		PipedInputStream in = null;
		try {
			in = new PipedInputStream(out);
			// 管道对接
			Thread a = new A(in);
			Thread b = new B(out);
			a.start();
			b.start();
			//join():等待这个线程死亡。 
			a.join();
			b.join();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		try {
			if(out!=null) {
				out.close();
			}
			if(in!=null) {
				in.close();
			}
			System.out.println("程序运行结束!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
//读
class A extends Thread {
	private PipedInputStream in;
	public A(PipedInputStream in) {
		this.in = in;
	}
	@Override
	public void run() {
		File file=new File("D:\\JD2109-workspace\\java_demo\\src\\com\\briup\\day20\\pipe.txt");
		FileOutputStream out=null;
		try {
			out=new FileOutputStream(file);
			int len = -1;
			while ((len = in.read()) != -1) {
				System.out.write(len);
				System.out.flush();
			}
			System.out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
//写
class B extends Thread {
	private OutputStream out;

	public B(OutputStream out) {
		this.out = out;
	}
	@Override
	public void run() {
		InputStream in=System.in;
		int len=-1;
		try {
			while((len=in.read())!=-1) {
				if (len == 10) {
					// 如果遇到回车表示结束
					return;
				}
				out.write(len);
				out.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

2. 字符流和字节流有什么区别?

  1. 处理单元:
    (1)字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。
    (2)字节流处理单元为1个字节,操作字节和字节数组。
  2. 适用情况:
    (1)字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。
    (2)所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。
  3. 处理的对象:
    (1)字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
    (2)字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
  4. 字节流与字符流主要的区别是他们的的处理方式:
    (1)Java的字节流:InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
    (2)Java的字符流:Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。

注意: InputStream,OutputStream,Reader,writer都是抽象类,所以不能直接new。
通常说,字节流的功能比字符流的功能强大,因为计算机中所有的数据都是二进制的,而字节流可以处理所有的二进制文件。但如果使用字节流来处理文本文件,则需要使用合适的方式把这些字节转换成字符,增加了编程的难度。所以通常有一个规则:如果进行输入/输出的内容是文本内容,则应该考虑使用字符流;如果进行输入/输出的内容是二进制内容,则应该考虑使用字节流。所有能用记事本打开并看到其中字符内容的文件称为文本文件,反之称为二进制文件。本质上计算机所有文件都是二进制文件,文本文件只是二进制文件的一种特例,当二进制文件的内容恰好能被正常解析成字符时,则该二进制文件就编程了文本文件。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:13:10  更:2021-09-02 11:14:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:46:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码