4.20 IO流

news2025/1/10 23:40:52

IO流结构

InputStream(字节输入流)

public static void main(String[] args)  {
        // byteInputStream();
        // byteInputStream1();
        // byteInputStream2();
        byteInputStream3();
    }
    // 使用字节流时对于中文汉字基本都会出现乱码问题,因此对中文乱码问题通常用字符流Reader和Writer
    // 字节输入流(手动关闭资源),一个一个字节读,速度较慢
    public static void byteInputStream() {
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("C:\\Users\\21941\\Desktop\\sql.txt");
            int read = 0;
            while ((read = inputStream.read()) != -1) {
                System.out.print((char) read);
            }
        }catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    // 字节输入流(自动关闭资源),一个一个字节读,速度较慢
    public static void byteInputStream1() {
        try (InputStream inputStream = new FileInputStream("C:\\Users\\21941\\Desktop\\sql.txt");) {
            int read = 0;
            while ((read = inputStream.read()) != -1) {
                System.out.print((char) read);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    // 字节输入流(自动关闭资源),一个一个字节读,将读取的先字节存入数组,一同取出,速度较快
    public static void byteInputStream2()  {
        try (InputStream inputStream = new FileInputStream("C:\\Users\\21941\\Desktop\\sql.txt");) {
            byte[] bytes = new byte[1024];
            while ((inputStream.read(bytes)) != -1) {
                System.out.print(new String(bytes));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    // 字节输入流(自动关闭资源),一个一个字节读,将读取的先字节存入数组,一同取出,速度较快
    public static void byteInputStream3()  {
        try (InputStream inputStream = new FileInputStream("C:\\Users\\21941\\Desktop\\sql.txt");) {
            byte[] bytes = new byte[1024];
            int temp=0;
            while ((temp=inputStream.read(bytes)) != -1) {
                // 防止读到最后时不能全部覆盖之前的,输出每一次读取的内容
                System.out.print(new String(bytes,0,temp));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

OutputStream(字节输出流)

public static void OutputStream(){
        // 没有文件则自动新建
        /*OutputStream outputStream = new FileOutputStream(路径)
        OutputStream outputStream = new FileOutputStream(路径,是否追加(默认false))*/
        try (OutputStream outputStream = new FileOutputStream("D:\\soft\\javawork\\javawork\\one\\four\\src\\com\\tianliang\\io0\\outputstream.txt")){
            outputStream.write(97);
            byte[] bytes = {10,23,52,99,45,3,15};
            outputStream.write(bytes);
            // outputStream.write(字节数组/整形/字节数组,偏移量,长度);
            // 输出流需要刷新
            outputStream.flush();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

Reader(字符输入流)

public static void reader(){
        // 用自动关闭方式
        try (Reader reader = new FileReader("C:\\Users\\21941\\Desktop\\sql.txt")){
            char[] chars = new char[1024];
            int temp=0;
            while ((temp =reader.read(chars))!=-1){
                System.out.print(new String(chars,0,temp));
                // reader.read(字符数组/字符数组,偏移量,长度);
            }
        }catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

Writer(字符输出流)

/*FileWriter writer = new FileWriter(路径)
    FileWriter writer = new FileWriter(路径,是否追加(默认false))*/
    public static void writer() {
        try (Writer writer = new FileWriter("D:\\soft\\javawork\\javawork\\one\\four\\src\\com\\tianliang\\io0\\writer.txt")) {
            writer.write(97);
            String string = "你好";
            writer.write(string);
            char[] chars = {'A', 'S', 'G', 'H', 'T', 'E', 'F', 'd', 'g', 'b', 'n', 'm', '中', '国'};
            writer.write(chars);
            writer.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

InputStreamReader(字节输入转字符输入流)

处理字节乱码问题,也可以处理编码乱码问题

public static void main(String[] args) {
		// 转换流,还可以通过设置字符编码解决乱码
		try {
			FileInputStream fis = new FileInputStream("E:/test.txt");
			// 转换的时候,还可以指定字符编码,用于解决乱码问题
			// 默认UTF-8
			InputStreamReader isr = new InputStreamReader(fis,"GBK");
            InputStreamReader isr = new InputStreamReader(fis,编码);
			int temp = 0;
			while ((temp = isr.read()) != -1) {
				System.out.print((char)temp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
public static void main(String[] args) {
		try (
				// 字节输入流
				FileInputStream fis = new FileInputStream(路径);
				// 转换为字符输入流,为什么不是FileReader类型呢?
				// 因为FileReader 继承了InputStreamReader 所以一样
				InputStreamReader isr = new InputStreamReader(fis);
				){
			// 和字符输入流使用方式一样
			// 读取char数组
			// isr.read(chars);
			// 读取一个字符
			// isr.read();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

OutputStreamWriter(字节输出转字符输出流)

public static void main(String[] args) {
		try (
				// 字节输出流
				FileOutputStream fos = new FileOutputStream(路径);
				// 转换为字符输出流
				OutputStreamWriter osw = new OutputStreamWriter(fos);
				){
			// 和字符输出流用法一样
			osw.write("xxx");
			osw.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

BufferedReader(字符输入缓冲流)

提高读取速度,增加按行读的方法readLine();剩余使用方法和字符输入流一样

public static void main(String[] args) {
		try (
				// 字符输入流,传入文件路径
				FileReader fr = new FileReader(路径);
				// 字符输入缓冲流,传入字符输入流
				BufferedReader br = new BufferedReader(fr);
				){
			// 使用方式和字符输入流一样
			// br.read();
			// br.read(chars)
			// 新增读取一行的方法,返回读取到的这一行数据
			// 到达文件末尾,返回null
			// String temp = br.readLine();
			String temp = null;
			while ((temp=br.readLine()) != null) {
				System.out.println(temp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

BufferedWriter(字符输出缓存流)

增加写出速度,增加换行写出方法newLine();其余方式使用和字符输出流一样

public static void main(String[] args) {
		try (
				// 字符输出流,传入文件路径,和 是否覆盖写入
				FileWriter fw = new FileWriter("./src/com/test.txt");
				// 字符输出缓冲流,传入字符输出流对象
				BufferedWriter bw = new BufferedWriter(fw);
				){
			// 用法和字符输出流一样
			// bw.write(chars);
			// bw.write(int);
			// bw.write("xx");
			// 新增写出换行的方法
			bw.newLine();
			// 刷缓存
			bw.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

测试字符流与字符缓存流速度

public static void main(String[] args) {
		fileInputStreamTest(路径);
		bufferedFileInputStreamTest(路径);
	}
	public static void fileInputStreamTest(String path){
		long startTime = System.currentTimeMillis();
		try (
				FileInputStream fis =new FileInputStream(path);
				){
			int temp = 0;
			byte[] bytes = new byte[1024];
			while ((temp = fis.read(bytes)) != -1) {
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		long endTime = System.currentTimeMillis();
		System.out.println("读取完成,字节输入流耗时 : "+(endTime-startTime));
	}
	public static void bufferedFileInputStreamTest(String path){
		long startTime = System.currentTimeMillis();
		try (
				FileInputStream fis =new FileInputStream(path);
				BufferedInputStream bis = new BufferedInputStream(fis);
				){
			int temp = 0;
			byte[] bytes = new byte[1024];
			while ((temp = bis.read(bytes)) != -1) {
				//写入时需要执行的内容
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		long endTime = System.currentTimeMillis();
		System.out.println("读取完成,字节输入缓冲流耗时 : "+(endTime-startTime));
	}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1612521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ccfcsp201312-2 ISBN号码

注意&#xff1a;50分 -- u10&#xff0c;最后一位为X 代码&#xff1a; #include <bits/stdc.h> using namespace std; string s; int a[12]; int main() {cin >> s;a[1] s[0] - 0;a[2] s[2] - 0;a[3] s[3] - 0;a[4] s[4] - 0;a[5] s[6] - 0;a[6] s[7] - …

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

一.排序的概念 1.排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作 2.稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排…

【WinForm】背景图片绘制无效果的解决方法

例如&#xff0c;在WinForm桌面的窗体设置了背景图片&#xff0c;尝试从上方绘制时却未能产生预期效果, 就是从背景图片上面绘制却没有效果。 文章目录 示例改进 下面是一个在窗体背景上绘制圆形边框的示例。 示例 修改前&#xff0c;代码如下 var gCtx Graphics.FromImage…

vulfocus靶场redis 未授权访问漏洞之CNVD-2015-07557

目标系统的权限不够redis用户无法写计划任务和公钥&#xff0c;而且也没有开放ssh端口。 主从复制getshell&#xff0c;写入恶意的so文件达到执行系统命令的目的。 github上有一键可以利用的脚本 https://github.com/n0b0dyCN/redis-rogue-server.git 利用条件&#xff1a;需…

polkit服务启动失败

使用systemctl 命令报错 Authorization not available. Check if polkit service is running or see debug message for more information. 查看polkit状态是失败的状态&#xff0c;报缺少libstdc.so.6 systemctl status polkit 需要安装libstdc.so.6库 先加载所有安装包 …

深入剖析Spring框架:循环依赖的解决机制

你好&#xff0c;我是柳岸花开。 什么是循环依赖&#xff1f; 很简单&#xff0c;就是A对象依赖了B对象&#xff0c;B对象依赖了A对象。 在Spring中&#xff0c;一个对象并不是简单new出来了&#xff0c;而是会经过一系列的Bean的生命周期&#xff0c;就是因为Bean的生命周期所…

测绘管理与法律法规 | 测绘资质分类分级标准 | 学习笔记

目录 1. 申请条件 2.审批程序 3.专业技术人员的特殊规定 1. 申请条件 法人资格&#xff1a;申请单位必须具有法人资格。 专业技术人员&#xff1a;需拥有与测绘活动相适应的测绘专业技术人员和相关专业技术人员。 技术装备&#xff1a;具备与测绘活动相适应的技术装备和设…

数据分析(1)

数据分析基础&#xff08;1&#xff09; 为了让刚开始学习的朋友对数据分析有一个清晰的整体认识&#xff0c;因此笔者在此对数分进行一个较为详细的介绍有助于大家更好的在宏观层面进行理解&#xff0c;避免在后续学习中产生迷茫。 数据分析的概念 定义&#xff1a;数据分析…

Redis(单/多)线程

一、 Redis 单线程 与 多线程 怎么说&#xff1f; &#xff08;1&#xff09;重要的版本迭代 redis4 之前仅支持 单线程&#xff0c; redis 4之后慢慢 支持多线程&#xff0c; 直到redis6/7后才稳定 &#xff08;2&#xff09;redis 的 工作线程 是 单线程的 &#xff08…

AtCoder Beginner Contest 350

前面两道阅读理解直接跳过。 C - Sort 大意 给定一个的排列&#xff0c;你可以执行最多次以下操作&#xff0c;让序列变得有序&#xff1a; 选择两个元素&#xff0c;交换它们的位置。 输出任意可行的操作次数及其对应的操作步骤。 思路 从&#xff0c;考虑把交换到第位…

机器学习中的过拟合问题及应对策略:深入剖析与实战指南

在机器学习的领域中&#xff0c;过拟合是一个普遍而又棘手的问题。过拟合指的是模型在训练数据上表现优秀&#xff0c;但在未知或测试数据上表现不佳的现象。这通常是因为模型过于复杂&#xff0c;以至于“记住”了训练数据的噪声和细节&#xff0c;而非学习其内在规律和结构。…

互连芯片浪潮席卷AI服务器:突破瓶颈,再创辉煌

改变AI服务器&#xff1a;互连芯片技术创新和突破 AI服务器崛起&#xff0c;引领未来创新根据TrendForce数据&#xff0c;AI服务器出货量达130,000台&#xff0c;占服务器总出货量的1%。主要制造商推出生成式AI产品&#xff0c;推动订单激增。ChatGPT等应用的需求持续增长&…

windows ubuntu 子系统:肿瘤全外篇,2. fq 数据质控,比对。

目录 1.质控 2.比对并排序 3.标记PCR重复,使用picard 4.samtools建立索引 首先我们先下载一组全外显子测序数据。nabi sra库&#xff0c;随机找了一个。 来自受试者“16177_CCPM_1300019”(SRR28391647, SRR28398576)的样本“16177_CCPM_1300019_BB5”的基因组DNA配对端文库…

VisionPro 脚本教程专栏:深入理解与实践

文章目录 VisionPro 脚本教程专栏&#xff1a;深入理解与实践。目录1. 脚本简介1.1 VisionPro 项目组成1.2 脚本的作用 2. 脚本类与方法2.1 ToolGroup 脚本类2.2 ToolBlock 脚本类2.3 Job 脚本类 3. 脚本使用案例3.1 Job脚本&#xff1a;自动调节曝光时间3.2 ToolBlock脚本&…

C++:面向对象三大特性之一:继承

继承 1.继承理解2.继承方式引起访问变化表格表格理解 3.赋值转换1.普通对象赋值2.继承对象赋值&#xff1a;赋值转换注意 4.继承的作用域5.派生类默认成员函数1.构造函数2.析构函数3.拷贝构造4.赋值重载 6.继承与友元7.继承与静态成员 1.继承理解 继承机制是面向对象程序设计使…

驶向成功:如何选择适合国际拓展的完美CRM

一、出海企业应该怎么选择CRM&#xff1f; 出海企业在选择CRM系统时&#xff0c;需要考虑行业特性以及在对外业务过程中可能遇到的问题。接触了一些出海企业客户&#xff0c;总结了以下出海企业在选择CRM时的诉求。 1、合法合规风险 出海企业的业务遍布不同国家地区&#xff…

【考研数学】基础跟武忠祥,同步刷《660》的正确方法

听我的&#xff0c;现在立刻马上停下来 你这不是在做题&#xff0c;你这是在看题&#xff0c;效果最差的那种&#xff0c;做完过两天就忘的一干二净了 我不敢说我特别会学习考研数学&#xff0c;但是我考研的时候&#xff0c;最后数学一的成绩是120&#xff0c;不算特别好&am…

搞定这些python自动化测试面试题与答案汇总,offer拿到手软!

1、什么项目适合做自动化测试&#xff1f; 关键字&#xff1a;不变的、重复的、规范的 1&#xff09;任务测试明确&#xff0c;需求不会频繁变动 2&#xff09;项目周期要足够长 3&#xff09;自动化测试脚本可重复使用&#xff0c;比如&#xff1a;比较频繁的回归测试 4&…

01-大语言模型发展

AI大模型的相关的一些基础知识&#xff0c;一些背景和基础知识。 多模型强应用AI 2.0时代应用开发者的机会。 0 大纲 AI产业的拆解和常见名词应用级开发者&#xff0c;在目前这样一个大背景下的一个职业上面的一些机会实战部分的&#xff0c;做这个agent&#xff0c;即所谓智…

基于pytest自动化测试框架分享

一、pytest运行方式与基本规范 1.简单介绍 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有以下几个特点&#xff1a; 简单灵活&#xff0c;容易上手支持参数化能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做Web UI自动化测试&#xff0…