转换流-数据流-对象流-打印流-标准输入输出流

这篇具有很好参考价值的文章主要介绍了转换流-数据流-对象流-打印流-标准输入输出流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、转换流

转换输入流

把字节流转换为字符流,转换流是一种处理流。字节流有乱码的可能。
假设input.txt文件中存放了字符串“abc中国”,使用字节流读取会乱码,使用字符流读取是使用平台默认的编码格式读取的,如果文本存储是不是平台的编码格式,也会出现乱码。转换流本质上就是加了编码格式的字符流。

@Test
public void test(){
	//字节输入流
	FileInputStream fis = new FileInputStream("test/input.txt");
	int b ;
	while((b = fis.read()) != -1){
		System.out.println((char) b);
	}
	fis.close();
}
@Test
public void test(){
	//字符输入流
	FileReader fis = new FileReader("test/input.txt");//IDEA默认设置为utf-8格式
	int b ;
	while((b = fis.read()) != -1){
		System.out.println((char) b);
	}
	fis.close();
}
@Test
public void test(){
	//转换流 = 字节流 + 编码格式
	InputStreamReader isr = new InputStreamReader(
	new FileStreamReader("test/input.txt"), "GBK");
	int b ;
	while((b = fis.read()) != -1){
		System.out.println((char) b);
	}
	fis.close();
}

转换输出流

由于字符集的数量很多,在输入输出时,必须使用转换流转换成对应编码格式后再进行写入和读出,才能保证数据不会乱码。

@Test
public void test(){
	//文件字节输出流
	FileOutputStream fos = new FileOutputStream("output.txt");//没有指定编码格式
	//中占了两个字节,切分后会乱码
	fos.write("中");//该代码只会输出一半
	fis.close();
}
@Test
public void test(){
	//创建文件输出流
	OutputStreamWriter fos = new OutputStreamWriter("output.txt");
	//创建转换流
	OutputStreamWriter osr = new OutputStreamWriter(fos, "GBK");
	fos.write("中");//转换流写出
	fis.close();
}

二、数据流

数据流也是一种处理流,用来读写取基本数据类型的数据。

写入数据到文件中

public class DataioDemo {
    @Test
    public void test1() throws IOException {
        //创建数据输出流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("test/dos.txt"));
        //写出数据
        dos.writeBoolean(true);
        dos.writeDouble(123.45);
        dos.writeInt(23);
        dos.writeUTF("您好");
        //关闭流
        dos.close();
    }

从文件中读取数据,注意读取数据顺序要和写入数据顺序一致。

@Test
    public void test2() throws IOException {
        //创建数据输入流
        DataInputStream dis = new DataInputStream(new FileInputStream("test/dos.txt"));
        //读取数据
        //读取数据顺序要和写入数据顺序一致
        boolean b = dis.readBoolean();
        System.out.println("b = " + b);
        double d = dis.readDouble();
        System.out.println("d = " + d);
        int i = dis.readInt();
        System.out.println("i = " + i);
        String s = dis.readUTF();
        System.out.println("s = " + s);
    }

三、序列化和对象流

1 序列化和反序列化

序列化:序列化是指将内存中java对象以字节序列的形式表示,用于持久化存储。
反序列化:把字节序列重构为内存中的java对象。
前提条件:一个类要被序列化,那么这个类必须实现序列化接口。

类实现序列化接口后,进行序列化时会自动生成一个序列化版本号,一旦在反序列化时,如果修改过类的属性 和方法,会再自动生成另一个序列号。如果两者不一致,则无法实现序列化。实际开发过程中,新增一个属性、方法或者删除某个方法是很常见的,为了能够使修改后也能读取文件中的序列化对象,可以手动为类加上序列化ID。

private static final long serialVersionUID = -2324225L;

注: transient关键字:它修饰的变量不会被序列化。静态变量也不会被序列化。

2 对象流

对象序列化后转换成为字节序列,对象流的作用是用来读写对象的字节序列。分为对象输入流和对象输出流。

 @Test
    public void test1() throws IOException {
        //创建对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test/obj.txt"));
        //写出数据:java对象
        oos.writeObject(new Student("张三",34));
        //关闭流
        oos.close();
    }

    @Test
    public void test2() throws IOException, ClassNotFoundException {
        //创建对象输出流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test/obj.txt"));
        //读取对象数据
        Student s = (Student) ois.readObject();
        System.out.println(s);

        //关闭流
        ois.close();
    }

四、打印流

只有输出,没有输入,输出的数据全部以字符串形式输出。分别为PrintStream字节打印流和PrintWriter字符打印流。
打印流的特有方法:

  • print():输出内容不换行
  • println():输出内容后换行

打印输出任意类型的数据,结果都是先转换为字符串再输出。带缓冲区的输出流数据默认先进入缓冲区,打印流可以支持自动刷新缓冲区。打印流也支持指定编码格式输出字符串。

@Test
public void test(){
	//创建字节打印流
	PrintStream ps = 
	new PrintStream("test/ps.txt");
	//打印数据
	ps.print("hello");
	ps.print(true);
	ps.print("world");
	ps.print(123.45);
	//关闭流
	ps.close();
}

带缓冲的字节打印流

@Test
public void test(){
	//创建缓冲流
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test/ps.txt"));
	//创建字节打印流
	PrintStream ps = new PrintStream(bos);
	//打印数据
	ps.println(97);
	//关闭流
	ps.close();
}

创建字符打印流

@Test
public void test(){
	//创建字符打印流
	PrintWriter pw = 
	new PrintWriter("test/pw.txt");
	//打印数据
	pw.println("hello");
	pw.println("您好");
	pw.println(123);
	//关闭流
	ps.close();
}

五、标准输入输出流

标准输入输出流是打印流的一种,输出内容到控制台。可以通过setOut方法来修改打印位置。

  • System.in: 标准输入流,从键盘读取数据;
  • System.out:标准输出流,打印数据到控制台。

自己模拟扫描器Scanner:

@Test
public void test(){
	BufferedReader br = new BufferedReader(
	new InputSteamReader(System.in));
	System.out.println("请输入数据");
	String line  = br.readLine();
	System.out.println("您输入的是: " + line );
}

六、Properties类

该类有store方法和load方法可以将属性集合从内存中写入到文件中,也可以从文件中取出数据。文章来源地址https://www.toymoban.com/news/detail-656111.html

@Test
public void test1(){
	Properties prop = new Properties();
	
	prop.setProperty("name", "tom");
	prop.store(new FileWriter("test/prop.properties"));
}
@Test
public void test1(){
	Properties prop = new Properties();
	
	prop.load(new FileReader("test/prop.propties"));

	//从集合中取出数据
	String name = prop.getProperty("name");
	System.out.println(name);
}

到了这里,关于转换流-数据流-对象流-打印流-标准输入输出流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JS各种数据流之间的格式(ArrayBuffer、Uint8Array、Blob、 File、DataURL)相互转换及应用

    前端网页 File 上传、下载,Canvas 保存图片,Ajax 和 Fetch 二进制流传输,PDF 预览,浏览器上 WebAssembly 的应用 等等都需要到 ArrayBuffer 和 Blob 。 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要

    2024年02月08日
    浏览(42)
  • 什么是Vue的数据流(单向数据流)?如何进行数据流管理

    在Vue中,数据流是指数据的传递和管理方式。Vue采用的是单向数据流,也就是说,数据是从父组件流向子组件,子组件不能直接修改父组件的数据。本文将介绍Vue的数据流机制,以及如何进行数据流管理。 Vue的数据流机制可以分为两类:props和events。 Props 在Vue中,父组件可以

    2024年02月08日
    浏览(62)
  • 银行储蓄系统的顶层数据流图及细化数据流图

    绘制出银行储蓄系统的顶层数据流图及细化数据流图; 银行储蓄系统存、取款流程如下: 1)业务员事先录入利率信息; 2)如果是存款,储户填写存款单,业务员将存款单键入系统,系统更新储户存款信息(存款人姓名、存款人账号、电话号码、身份证号码、存款金额、存

    2024年01月17日
    浏览(48)
  • Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

    警告 :此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。 在本教程中,我们将了解如何将现有数据流(data stream)从索引生命周期管理 (ILM) 迁移到数据

    2024年04月29日
    浏览(46)
  • 数据流图(DFD)

    数据流图是用于表示系统逻辑模型的一种工具。从数据 传递和加工 的角度,以图形的方式描述数据在系统中流动和处理的过程 数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是 对数据流图中的各个元素做出详细的说明 ,

    2024年02月04日
    浏览(51)
  • postman 数据流请求

    备注: Postman version : Version 9.21.3 Windows 版本 1.修改headers 2.Body 部分 选择raw 格式数据 3.最后执行请求

    2024年02月11日
    浏览(63)
  • Flink数据流

    官网介绍 Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 被设计为在所有常见的集群环境中运行,以内存中的速度和任何规模执行计算。 1.无限流有一个开始,但没有定义的结束。它们不会在生成数据时终止并提供数据。必须连续处

    2024年02月17日
    浏览(48)
  • Java文件读写数据流

    以下这几个类都是抽象类.并且都有对于文件操作的具体实现类.File+类名就是具体的实现类 1.1.1.InputStream 以二进制方式读.有两个主要方法. 1.read(); 该方法有三个版本 无参: read() 读取一个字节的数据,返回 -1 表示读取结束 一个参数: read(byte[] b) 最多读取 b.length 字节的数据到 b

    2024年02月16日
    浏览(44)
  • C# 数据流 FileStream

     

    2024年03月24日
    浏览(44)
  • 指令流和数据流

    指令流和数据流 Flynn于1972年提出计算平台分类法主要根据指令流和数据流来分类,分为四类: ①单指令流单数据流机器(S1SD) SISD机器是一种传统的串行计算机,它的硬件不支持任何形式的并行计算,所有的指令都是串行执行。并且在某个时钟周期内,CPU只能处理一个数据流

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包