黑马程序员——————IO (一

第一讲     IO概述

概述

1IO流:即InputOutput的缩写。

2、特点:

        1IO流用来处理设备间的数据传输。

        2Java对数据的操作是通过流的方式。

        3Java用于操作流的对象都在IO包中。

        4)流按操作数据分为两种:字节流和字符流。

        5)流按流向分为:输入流和输出流。

注意:流只能操作数据,而不能操作文件。

3IO流的常用基类:

        1)字节流的抽象基流:InputStreamOutputStream

        2)字符流的抽象基流:ReaderWriter

注:此四个类派生出来的子类名称都是以父类名作为子类名的后缀,以前缀为其功能;如InputStream子类FileInputStreamReader子类FileReader

 

第二讲    字符流

一、简述

        1、字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。

        2、字符流只用于处理文字数据,而字节流可以处理媒体数据。

        3、既然IO流是用于操作数据的,那么数据的最常见体现形式是文件。查看API,找到一个专门用于操作文件的Writer子类对象:FileWriter   后缀是父类名。前缀名是流对象的功能。该流对象一被初始化,就必须有被操作的文件存在。

 

二、字符流的读写

1、写入字符流步骤

        a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数据要存放的目的地。

        b、调用write(String s)方法,将字符串写入到流中。

        c、调用flush()方法,刷新该流的缓冲,

        d、调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据。

close()flush()区别:

        flush()刷新后,流可以继续使用;

       而close()刷新后,将会关闭流,不可再写入字符流。


 示例:

[java]  view plain copy
  1. import java.io.*;  
  2.   
  3. class FileWriterDemo   
  4. {  
  5.     public static void main(String[] args)   
  6.     {  
  7.         writerDemo("abcde");//写入数据  
  8.         writerFrom("zheshi:\r\nshenma");//续写数据,并附换行操作  
  9.     }  
  10.   
  11.     //在硬盘上创建一个文件并写入指定数据  
  12.     public static void writerDemo(String s)  
  13.     {  
  14.         FileWriter fw=null;  
  15.         try  
  16.         {  
  17.             fw=new FileWriter("demo.txt");//创建文件  
  18.             fw.write(s);//将数据写入流  
  19.         }  
  20.         catch (IOException e)  
  21.         {  
  22.             throw new RuntimeException("写入失败");  
  23.         }  
  24.         finally  
  25.         {  
  26.             if(fw!=null)  
  27.                 try  
  28.                 {  
  29.                     fw.close();//将写入流的数据刷到指定文件内,并关闭流资源  
  30.                 }  
  31.                 catch (IOException e)  
  32.                 { 
  33. throw new RuntimeException("关闭失败");   
  34.                 }  
  35.         }  
  36.     }  
  37.   
  38.     //对已有文件的数据续写指定数据  
  39.     public static void writerFrom(String s)  
  40.     {  
  41.         FileWriter fw=null;  
  42.         try  
  43.         {  
  44.             fw=new FileWriter("demo.txt",true);//传递一个true参数,代表从结尾开始续写数据。  
  45.             fw.write(s);  
  46.         }  
  47.         catch (IOException e)  
  48.         {  
  49.             throw new RuntimeException("写入失败");  
  50.         }  
  51.         finally  
  52.         {  
  53.             try  
  54.             {  
  55.                 if(fw!=null)  
  56.                     fw.close();  
  57.             }  
  58.             catch (IOException e)  
  59.             {  
  60. throw new RuntimeException("关闭失败");
  61.             }  
  62.         }  
  63.     }  
  64. }  

2、读取字符流步骤

        1)创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件已经存在,若不存在,将会发生异常FileNotFoundException

        2)调用读取流对象的read()方法。read():一次读一个字符,且会继续往下读。

              第一种方式:读取单个字符。第二种方式:通过字符数组进行读取。

        3)读取后要调用close方法将流资源关闭。

示例:

[java]  view plain copy
  1. import java.io.*;  
  2. class  FileReaderDemo  
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         //第一种读取方式  
  7.         singleCharReader();  
  8.         //第二种读取方式  
  9.         arrayCharReader();  
  10.     }  
  11.   
  12.     //第一种读取方式,单个字符读取  
  13.     public static void singleCharReader()  
  14.     {  
  15.         FileReader fr=null;  
  16.         try  
  17.         {  
  18.               
  19.             fr=new FileReader("demo.txt");//读取文件位置和文件名  
  20.             for (int ch=0;(ch=fr.read())!=-1 ; )  
  21.             {  
  22.                 System.out.print((char)ch);  
  23.             }  
  24.         }  
  25.         catch (IOException e)  
  26.         {  
  27.             throw new RuntimeException("读取失败");  
  28.         }  
  29.         finally  
  30.         {  
  31.             try  
  32.             {  
  33.                 if(fr!=null)  
  34.                     fr.close();//关闭读取流资源  
  35.             }  
  36.             catch (IOException e)  
  37.             {  
  38.             }  
  39.         }  
  40.     }  
  41.   
  42.     //第二种读取方式,通过字符数组进行读取  
  43.     public static void arrayCharReader()  
  44.     {  
  45.         FileReader fr=null;  
  46.         char[] arr=new char[1024];//定义一个字符数组,用于临时存储读取的字符  
  47.         try  
  48.         {  
  49.             //读取一个.java文件,并打印在控制台上。  
  50.             fr=new FileReader("FileReaderDemo.java");  
  51.             for (int len=0;(len=fr.read(arr))!=-1 ; )  
  52.             {  
  53.                 //显示字符数组的字符个数  
  54.                 System.out.print(new String(arr,0,len));  
  55.             }  
  56.         }  
  57.         catch (IOException e)  
  58.         {  
  59.             throw new RuntimeException("读取失败");  
  60.         }  
  61.         finally  
  62.         {  
  63.             if(fr!=null)  
  64.                 try  
  65.                 {  
  66.                     fr.close();  
  67.                 }  
  68.                 catch (IOException e)  
  69.                 {  
  70.                 }  
  71.         }  
  72.     }  
  73. }  

注意:

        1、定义文件路径时,可以用“/”或者“\\”。

        2、在创建一个文件时,如果目录下有同名文件将被覆盖。

        3、在读取文件时,必须保证该文件已存在,否则出异常。

小练习:文本文件的后缀名


	public static void FileDemo(){
		//方法一
		File f =null;
		try {
			//制定路径文件夹
			 f=new File("e:\\abc");
			//boolean  bool = f.createNewFile();
			// boolean bool1 = f.isFile();
			//if(bool1){
			 //将文件夹中的文件赋值给String数组
				File[] str = f.listFiles();
				for(File fe :str){
					//判断String数组中的带有什么后缀名的文件如果有就为true
					if(fe.getName().indexOf(".txt")!=-1){
					System.out.println(fe.getName());
					}
			//	}
			//}else{
				//System.out.println("创建失败");
		}
		} catch (Exception e) {
		   e.printStackTrace();
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值