IO流的理解第二篇

        上篇介绍到文件File类的一些常用方法,这篇写写java中常用的2种流(字节流、字符流)以及他们是怎么去操作文件的。实际运用当中这两种流是常常结合缓冲流、转换流 一起使用,先给大家看看这几种流间的关系。

一、字节流

1,字节输入流    

      InputStream超类

              FileInputStream

              BufferedInputStream(缓冲流) 顾名思义是为了提高操作文件时的效率

常用方法:

 * int read() 读取一个字节
 * int read(byte[] b) 读取一定量字节
 * int read(byte[] b,int off, int len)将输入流中最多len个数据字节读入b中

2,字节输出流

      OuputStream 超类

            FileOutputStream

            BufferedOuputStream(缓冲流)

常用方法:

 *write(int b) 写入一个字节        写入此输出流
 *write(byte[] b) 写入字节数组
 *write(byte[] b, int off, int length) 写入字节数组  off 开始写入的索引 length 写几个

二、字符流(只能操作文本类型的文件)

1,字符输入流

      Reader超类

           BufferedReader 字符输入缓冲流

           InputStreamReader 转换流(字节转换为字符流)  InputStreamReader(FileInputStream in,String charsetName) 

                  FileReader (读取字符)

2,字符输出流

     Writer

         BufferedWriter 字符输出缓冲流

         OutputStreamWriter 转换流

                FileWriter (写入字符)  要使用flush()方法刷新流,否则写不进去

3,流的选择

      明确需求,要操作的时数据源还是数据目的。

      数据源:就是读,读到哪?InputStream(将数据读到此流中)

      数据目的:就是写,写到哪?OutputStream(将数据写到此流中)

注:我们可以这样理解。输入流输出流是面向文件的,而缓冲流是面向字节(字符)的,所以缓冲流是不能单独使用的。

BufferedInputStream bis =new BufferedInputStream (new FileInputStream(path));

三、与流相关的类:Properties类(Hashtable的子类,map集合中的方法都可以用)

       构造方法:Properties pro = new Properties();

       load(InputStream)  把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中

       load(Reader)  

       store(OutputStream,commonts)把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息

       stroe(Writer,comments);

下面以读取zip包为例来体验这些流的使用:

       d盘目录下下有个a.zip的压缩包,里面有个名为helleo文件夹,文件家中有张1.png图片

/**
 * 获取zip包的大小和解压之后的大小及里面的条目数
 * 获取图片分辨率(宽度和高度)
 *
 */
public class TestZipDemo {
	
	private static int LEN = 10000;
	private static final String path = "d:\\a.zip";
	public static void main(String[] args) {
		//先定义好要使用的文件和流对象
		File file = null;
		ZipFile zf = null;
		FileInputStream is =null;
		//缓冲流
		BufferedInputStream bis = null;
		ZipInputStream zis =null;
		ZipEntry zipEntry = null;
		//zip包的大小 单位B
		Long size = 0L;
		//zip解压之后的大小 单位B
		Long totalSize = 0L;
		//zip包中的条目数,文件夹也算
		int total = 0;
		//zip包中的条目数,文件夹也算
		int zipEntryies = 0;
		//读取字节到该数组
		byte b[] = new byte[LEN];
		
		//创建相关实例对象
		file = new File(path);
		try {
			zf = new ZipFile(path);
			is = new FileInputStream(path);
			bis = new BufferedInputStream(is);
			zis = new ZipInputStream(bis);
			size = file.length();
			total = zf.size();
			//遍历zip包
			while((zipEntry = zis.getNextEntry()) != null){
				//读一个加一个
				zipEntryies++;
				//是否为文件夹
				if(!zipEntry.isDirectory()) {
					String zipEntryName = zipEntry.getName();
					//获取该节点的输入流
					InputStream iss = zf.getInputStream(zipEntry);
					Image image = ImageIO.read(iss);
					//获取该图片的宽度
					int imageWidth = image.getWidth(null);
					//获取该图片的高度
					int imageHeigh = image.getHeight(null);
                    System.out.println("zipEntryName= "+zipEntryName);
					System.out.println("imageWidth= "+imageWidth);
					System.out.println("imageHeigh= "+imageHeigh);
					
					int cout = 0;
					while ((cout = zis.read(b, 0, LEN)) != -1){
						totalSize += cout;
					}
				}
			}
			System.out.println("size= "+size);
			System.out.println("total= "+total);
			System.out.println("zipEntryies= "+zipEntryies);
			System.out.println("totalSize= "+totalSize);
		} catch (ZipException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(zis != null)
				zis.close();
			} catch (IOException e) {
				throw new RuntimeException("释放资源失败");
			}
		}
		
		
	}

}

打印结果:

zipEntryName= helleo/1.png
imageWidth= 604
imageHeigh= 390
size= 79383
total= 2
zipEntryies= 2
totalSize= 80579

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安全性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值