InputStream字节输入流和OutStream字节输出流

news2024/9/25 19:24:49

InputStream

InputStream是Java标准库最基本的输入流,在java.io包内。它是一个抽象类

FileInputStream:从文件中读取数据,是最终数据源。

int read()方法:读取输入流的下一个字节,并返回字节表示的int值(0~255).如果已读到末尾,返回-1表示不能继续读取了。

不同方式读取文件的输入流 

package study1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

public class Demo03 {
	public static void main(String[] args) {
		// 创建一个基于读取文件方式的输入流
		try (FileInputStream in = new FileInputStream("F:\\Test\\Use\\yuan.jpg");){			
			//方式1:每次读取1个字节数据,读取至末尾时,返回-1
//			int data1 = in.read();
//			int data2 = in.read();
//			int data3 = in.read();
//			System.out.println(data1);
//			System.out.println(data2);
//			System.out.println(data3);
//			//通过循环,读取所有字节数据
//			int data = -1;
//			while((data = in.read()) != -1) {
//				System.out.println(data);
//			}
			
			//方式2:
//			byte[] buff = new byte[256];
//			int len = in.read(buff);
//			System.out.println("本次读取到的内容:"+Arrays.toString(buff));
//			System.out.println("本次读取到的长度:"+len);
			
			byte[] buff = new byte[128];
			int len = 0;
			while((len = in.read(buff)) > 0) {
				System.out.printf("本次读取到%d个字节:%s\n",len,Arrays.toString(buff));
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果: 

 OutputStream

OutputStream是Java标准库提供的用于写入操作的基础输出流。(抽象类)

void write(int b):写入一个字节到输出流。(虽然传入的是int参数,但只会写入一个字节,即只写入int最低8位表示字节的部分)

package study1;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Demo04 {
	public static void main(String[] args) {
		try {
			// 读取到一张图片的字节数据
			byte[] imgData = Files.readAllBytes(Paths.get("F:\\Test\\IOUse\\yuan.jpg"));
			// 创建文件输出流
			try(FileOutputStream out = new FileOutputStream("F:\\Test\\IOUse\\yi.jpg")){
				out.write(imgData);
				
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果: 

边读边写

FileInputStream和FileOutputStream

package study1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo05 {
	public static void main(String[] args) {
		try (FileInputStream in = new FileInputStream("F:\\Test\\IOUse\\yuan.jpg");
				FileOutputStream out = new FileOutputStream("F:\\Test\\IOUse\\ming.jpg");){
			byte[] buff = new byte[128];
			int len = 0;
			while((len = in.read(buff)) > 0) {
				out.write(buff,0,len);
			}
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

read不同用法区别

FileInputStream fis = new FileInputStream();

fis.read();//文件输入流:每次read()方法,都会产生磁盘的读取
BufferedInputStream in =new BufferedInputStream();
in.read();//每次read()方法,先在缓冲区读取,如果缓冲区读取完毕,则统一访问磁盘,进行内容填充

package study1;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

public class Demo06 {
	public static void main(String[] args) {
//		FileInputStream fis = new FileInputStream();
//		fis.read();//文件输入流:每次read()方法,都会产生磁盘的读取
//		BufferedInputStream in =new BufferedInputStream();
//		in.read();//每次read()方法,先在缓冲区读取,如果缓冲区读取完毕,则统一访问磁盘,进行内容填充
		try (BufferedInputStream in = new BufferedInputStream(
				new FileInputStream("F:\\Test\\IOUse\\yuan.jpg"))){
			byte[] buff = new byte[128];
			int len = 0;
//			
			//每次read()方法的调用,都会从BufferedInputStream缓冲区进行读取
			//每次读取“最多”128个字节
			while((len = in .read(buff)) > 0) {
				System.out.println(Arrays.toString(buff));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 运行结果:

  BufferedInputStream和BufferedOutputStream 

 BufferedInputStream:缓冲输入流,为另一个输入流添加一些和功能(本质是通过内部缓冲区数组实现的)。使缓冲区提高文件的读取

BufferedOutputStream:可以使用缓冲区对文件进行写入操作

package study1;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo07 {
	public static void main(String[] args) {
		try {
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream("F:\\Test\\IOUse\\yuan.jpg"));
			BufferedOutputStream bos = new BufferedOutputStream(
					new FileOutputStream("F:\\Test\\IOUse\\haha.jpg"));
			byte[] buff = new byte[2048];
			int len = 0;
			while((len = bis.read(buff)) > 0) {
				bos.write(buff, 0, len);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

读取网络照片到本地磁盘 

package study1;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class Demo08 {
	public static void main(String[] args) {
		String imageUrl = "https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0315%2Fbc0c9ab1j00sae5710193d001g800lom.jpg&thumbnail=660x2147483647&quality=80&type=jpg";
		try {
			URL url = new URL(imageUrl);
			try(InputStream in = url.openConnection().getInputStream();
					BufferedInputStream bis = new BufferedInputStream(in);
					BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\Test\\IOUse\\king.jpg"))){
				byte[] buff = new byte[1024];
				int len = 0;
				while((len = bis.read(buff)) > 0) {
					bos.write(buff,0,len);
				}
			}
		} catch (MalformedURLException e) {
		e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

 缓冲区字符输入流BufferedReader

BufferedReader类主要从字符输入流中读取字符存入缓存区,在后面读取直接可以从缓冲区读取,不需要每次都从数据源读取并进行字符编码转换,从而提高了字符读取的效率。

package study1;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Demo09 {
	public static void main(String[] args) {
		//缓冲区字符输入流
		try (BufferedReader reader = new BufferedReader(new FileReader("F:\\Test\\IOUse\\README.md"))) {
			String line = null;
			while((line = reader.readLine()) != null) {
				System.out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

 

读取网页的代码

package study1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class Demo10 {
	public static void main(String[] args) {
		try (
				//字节输入
				InputStream in = new URL("https://www.163.com/")
				.openConnection().getInputStream();
				//字符输入流(转换流)
				InputStreamReader reader = new InputStreamReader(in,"utf-8");
				//缓冲字符输入流
				BufferedReader br = new BufferedReader(reader);) {
			String line = null;
			while((line = br.readLine()) != null) {
				System.out.println(line);
			}
	    
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果: 

执行ipconfig命令,并获取执行结果

package study1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Demo11 {
	public static void main(String[] args) {
		//执行ipconfig命令,并获取执行结果
		
		//创建Runtime对象,用于执行命令
		Runtime runtime = Runtime.getRuntime();
		try {
			// 执行
			Process process = runtime.exec("ipconfig");
			// 获取执行结果(输入流)
			try(InputStream in = process.getInputStream();
					BufferedReader reader = new BufferedReader(new InputStreamReader(in));){
				String line = null;
				while((line = reader.readLine()) != null) {
					System.out.println(line);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

执行结果: 

  缓冲区字符输出流BufferedWriter 

BufferedWriter:将文本写入字符流,缓冲字符,以便有效的写入单个字符,数组和字符串。(可以指定缓冲区大小,或者可以接受默认大小)

 写入文本文件SNxx(SN1000~SN1078)

package study1;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Demo12 {
	public static void main(String[] args) {
		try (BufferedWriter bw = new BufferedWriter(
				new FileWriter("F:\\Test\\IOUse\\SN.txt",true));){
			for(int i = 1000;i <= 1078; i++) {
				String code = String.format("SN%d", i);
				bw.write(code); // 写入文本文件
				bw.newLine(); // 换行
			}
			} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果: 

写入ping www.163.com

补充:

在Java中,Tiemr类是用于调度后台任务的工具。它允许安排一个任务在将来的某个时间点运行,也可以按照某个固定的时间间隔重复运行任务

package study1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.LocalTime;
import java.util.Timer;
import java.util.TimerTask;

public class Demo13 {
	public static void main(String[] args) {
		System.out.printf("%s心跳检查程序启动......\n",LocalTime.now());
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				Runtime runtime = Runtime.getRuntime();
				try {
					Process process = runtime.exec("ping www.163.com");
					try(BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
					BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\Test\\IoUse\\log.txt",true));){
						String line = null;
						while((line = br.readLine()) != null) {
							bw.write(line);
							bw.newLine();
						}
					}
				
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}, 1000, 2000);
	}
}

运行结果:

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

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

相关文章

什么是Prompt Tuning?

本文是观看视频What is Prompt Tuning?后的笔记。 大语言模型&#xff08;如ChatGPT &#xff09;是基础模型&#xff0c;是经过互联网上大量知识训练的大型可重用模型。 他们非常灵活&#xff0c;同样的模型可以分析法律文书或撰写文章。 但是&#xff0c;如果我们需要用其解…

C语言数据结构基础——排序

目录 1.插入排序 2.冒泡排序 3. 堆排序 4.希尔排序 5.直接选择排序 6.快速排序☆☆ 6.1快速排序基础 6.2关于快速排序的时间复杂度 6.3随机数法和三数取中法 6.4其他的单趟实现方法 6.4.1挖坑法 6.4.2前后指针版快速排序☆ 6.4.3非递归实现快排☆ 7.归并排序 7.1递归…

spark核心概念

DAG 所谓DAG就是有向无环图&#xff0c;其实就是个无环的流程&#xff0c;Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler!则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据…

鱼眼相机的测距流程及误差分析[像素坐标系到空间一点以及测距和误差分析]

由于最近在整理单目测距的内容&#xff0c;顺手也总结下鱼眼相机的测距流程和误差分析&#xff0c;如果有错误&#xff0c;还请不吝赐教。 参考链接: 鱼眼镜头的成像原理到畸变矫正&#xff08;完整版&#xff09; 相机模型总结&#xff08;针孔、鱼眼、全景&#xff09; 三维…

医院设备管理平台:智能化管理,助推医院高效运行

在医疗科技飞速发展的今天&#xff0c;医院设备管理成为医院高效运营和优质服务的重要保障。信鸥科技凭借其深厚的技术积累和行业洞察力&#xff0c;推出了一款创新的医院设备管理平台&#xff0c;旨在帮助医院实现设备的智能化管理&#xff0c;提升运营效率&#xff0c;保障患…

WIFI驱动移植实验: openssl库的移植(wpa_supplicant 依赖库)

一. 简介 前面实现了WIFI驱动的移植&#xff0c;而连接某个WIFI热点上就需要用到 wpa_supplicant 工具&#xff0c;所以&#xff0c;本文开始为 移植 wpa_supplicant 工具做准备。 wpa_supplicant 依赖于 openssl库 与 libnl库&#xff0c;因此&#xff0c;需要移植一下open…

深入解析Spring MVC: 原理、流程【面试版】

什么是SpringMV? 1.是一个基于MVC的web框架&#xff1b; 2.是spring的一个模块&#xff0c;是spring的子容器&#xff0c;子容器可以拿父容器的东西&#xff0c;但是反过来不可&#xff1b; 2.SpringMVC的前端控制器是DispatcherServlet&#xff0c;用于分发请求。使开发变…

无需插件就能实现异构数据库的互联互通?(powershell妙用)

前两天在DBA群里有大佬分享了利用Oracle Database Gateway&#xff08;透明网关&#xff09;实现sqlserver和oracle 的数据交互&#xff0c;这里让我想到前些年写的一些powershell脚本用来做sqlserver和oracle的数据交互&#xff0c;powershell是windows自带的一个脚本工具&…

安防监控视频汇聚平台EasyCVR启用图形验证码之后如何调用login接口?

视频综合管理平台EasyCVR视频监控系统支持多协议接入、兼容多类型设备&#xff0c;平台可以将区域内所有部署的监控设备进行统一接入与集中汇聚管理&#xff0c;实现对监控区域的实时高清视频监控、录像与存储、设备管理、云台控制、语音对讲、级联共享等&#xff0c;在监控中心…

MongoDB Atlas维护指南:常见类型、注意事项与窗口设置

为了给Atlas用户更好的产品体验&#xff0c;MongoDB产品团队会进行定期维护。 本文将会介绍&#xff1a; 常见维护项目种类及频率&#xff0c;注意事项维护期间的影响及建议维护窗口设置说明维护告警设置和邮件通知范例 维护窗口常见项目 定期SSL证书轮换软件升级&#xff…

不要盲目开抖店,这才是开店的正确流程,2024全新版教程

我是王路飞。 抖音小店和视频号小店&#xff0c;我更建议没有经验的新手去做抖音小店。 虽然现在抖音小店不属于是一个蓝海项目了&#xff0c;但它依旧是我们普通人借助抖音流量变现非常重要的一个渠道&#xff0c;甚至没有之一。 至于视频号小店&#xff0c;可以说是当下最…

康耐视visionpro-CogPMAlignTool工具详细说明

CogPMAlignTool功能: 匹配产品形状,实现产品定位。 CogPMAlignTool操作说明: 1.打开工具栏,双击或点击鼠标拖拽添加CogPMAlignTool工具 ②.添加输入图像:右键“链接到”或以连线拖拽的方式选择相应输入图像 ③.点击“抓取训练图像”按钮获取训练图像 ④.在图像下拉列表中…

集体出走的Stability AI 发布全新代码大模型,3B以下性能最优,超越Code Llama和DeepSeek-Coder

Stability AI又有新动作&#xff01;程序员又有危机了&#xff1f; 3月26日&#xff0c;Stability AI推出了先进的代码语言模型Stable Code Instruct 3B&#xff0c;该模型是在Stable Code 3B的基础上进行指令调优的Code LM。 Stability AI 表示&#xff0c;Stable Code Instru…

frp 内网穿透

一、公网服务器运行frps -c my.ini my.ini文件代码 [common] bind_port 7000 #公网服务器开启的监听端口 二、在已经拿到shell的内网服务器1&#xff0c;即内网的web服务器运行 frpc -c frpc.ini frpc.ini文件代码 [common] server_addr 192.168.23.134 #公网服务…

vue 借助vue-amap插件对高德地图的简单使用

需求&#xff1a;实现点击获取经纬度、定位、对特殊位置标点及自定义信息窗体功能。 高德地图的官网API&#xff1a;概述-地图 JS API 1.4 | 高德地图API vue-amap的中文文档&#xff1a;组件 | vue-amap 实现&#xff1a; 1、安装vue-amap插件 npm install vue-amap --save…

linux之Haproxy

介绍 haproxy是一种开源的TCP和HTTP负载均衡代理服务器软件。客户端通过Haproxy代理服务器获得站点页面&#xff0c;而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器 下载Haproxy yum install haproxy -y 开启服务 systemctl start haproxy 配…

Android笔记(三十):PorterDuffXfermode实现旋转进度View

背景 核心原理是使用PorterDuffXfermode Path来绘制进度&#xff0c;并实现圆角 效果图 Android笔记(三十)效果演示 进度条绘制步骤 将ImageView矩形七个点的坐标存储起来&#xff08;configNodes&#xff09; 他们对应着7个不同的刻度&#xff0c;每个刻度的值 i * &#…

确保未来安全:应对云安全的复杂性

云是业务运营的重要组成部分&#xff0c;它改变了组织扩展、创新和适应的方式。然而&#xff0c;其影响力日益增长的广度和深度不仅仅局限于商业领域。云环境是我们日常生活中不可或缺的一部分&#xff0c;负责存储和传输全球平民最敏感的数据。随着大量企业和个人利用云&#…

【Faster Bing】Bing 搜索结果取消跳转至 bing.com/ck

更快的 Bing (Faster Bing) 1. 介绍 项目地址&#xff1a; GitHub: https://github.com/jiang-taibai/faster-bingGitee: https://gitee.com/jiang-taibai/faster-bingGreasyFork: https://greasyfork.org/en/scripts/490999-faster-bing 在使用 Bing 搜索时&#xff0c;Bin…

HarmonyOS 应用开发之UIAbility组件与UI的数据同步

基于当前的应用模型&#xff0c;可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;在基类Context中提供了EventHub对象&#xff0c;可以通过发布订阅方式来实现事件的传递。在事件传递前&#xff0c;订阅者需要先进行订阅&a…