IO流与Lambda表达式的使用

IO流,Lambda表达式,

一.什么是io流?

流是一组有顺序的,有起点和终点的字节集合,是对数据对象的总称或抽象。它的特征是进行数据的传输。

例如从水源地长江(资源)把水导入到自来水厂(程序),然后自来水厂在把水输送到每家每户(文件),长江到自来水厂之间就是输入流,自来水厂再把水送到每家每户,我们称为输出流。

二.流的分类

流按照流向可分为输入流,输出流。

流按照处理数据类型的单位不同可以分为字节流和字符流

三.字节流和字符流
字节流:InputStream和OutputStream是java按照最小字节单位读取的流,每次都读取一个字节。
字符流:是以字符为单位进行数据处理的IO流。
字节流与字符流之间的区别?

1.读取的单位不同:字节流是以字节为单位(8位2进制),字符流是以字符为单位,根据码表来映射字符

2.处理对象不同:字节流可以处理所有类型的数据(如图片,avi等),字符流只可以处理字符类型的数据

四.节点流
1.文件:FileInputStream,FileOutputStream
public class IODemo2 {
	//声明输入流,输出流
	static InputStream in = null;
	static OutputStream os = null;
	public static void main(String[] args) {
		//创建流
		try {
			in = new FileInputStream("D:/text.txt");
			//如果输出流中没有该文件,java会自动帮你创建该路径文件
			os = new FileOutputStream("E:/text.txt");
			//字节数据
			byte[] b = new byte[1024];
			//长度
			int len=0;
			//读取文件内容并写入
			while((len=in.read(b))!=-1) {
				//写入,如果写读取长度范围,就会一次性读取1024范围,造成空间浪费读取
				os.write(b,0,len);
			}
			//清理缓冲
			os.flush();		
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//关闭资源
			//判断是否存入的流对象为空
			try {	
				if(in!=null) { //防止空指针异常
				
					in.close();
				} 
				if(os!=null) { //防止空指针异常
				os.close();
				}
			}catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
		}
		}
	}
2.FileReader,FileWriter
public class Test01 {

	public static void main(String[] args) throws IOException {
		//输入流,输出流
		Reader rd = new FileReader("D:/text.txt");
		Writer wt = new FileWriter("D:/hao.txt");
		//字符数组
		char[] car = new char[1024];
		//个数
		int len=-1;
		while(-1!=(len=rd.read(car))) {
			wt.write(car,0,len);
			System.out.println("完成拷贝!");
		}
		//刷出
		wt.flush();
		//关闭资源
		wt.close();
		rd.close();
	}
}

五.对象(功能)流

1.ObjectOutputStream(对象输出流)

2.ObjectInputStream(对象输入流)

//对象输出流
	public static void getWrite(String name) throws  IOException {
		ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(name));
		os.writeBoolean(false);
		os.writeChar(97);
		os.writeObject(new Person("李杨",22));
		os.writeUTF("UTF-8");
		//刷出
		os.flush();
		//关闭资源
		os.close();
	}
	
	//对象输入流
	public static void getRead(String name) throws IOException, ClassNotFoundException {
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(name));
		boolean b = ois.readBoolean();
		char c = ois.readChar();
		Object o = ois.readObject();
		System.out.println(b+"---->"+c+"----->"+o);
		//关闭资源
		ois.close();
	}
六.lambda表达式
1.什么是lambda?

用来简化匿名内部类的代码量。

2.lambda的用法

():代表重写方法的参数列表。

​ ->:lambda表达式,具有推倒作用,可以让该显示为lambda表达式。

{}:重写方法的方法体。

3.lambda的使用前提

必需要有函数式接口,函数式接口有且只有一个抽象方法,@FunctionalInterface可以用来检测是否是函数式接口

七.四大核心接口

1.消费性接口:Consumer 方法:void accept(T t)

2.供给型接口:Supplier 方法: T get()

3.函数型接口:Function<T,R> 方法:R apply(T t)

4.断电型接口:Predicate 方法:boolean test(T t)

八.简化lambda表达式

1.方法引用

@Test
	public void test() {
		//Supplier<Employee> sup =()->new Employee();
		//Supplier<Employee> sup = Employee::new;
		//Function<String,Employee> fun=(i)->new Employee(i);
		//简化
		//Function<String,Employee> fun = Employee::new;
		//A<String,Employee> a = (t)->new Employee(t);
		//System.out.println(a.get("你好"));
	}

2.类名::成员方法

@Test
	public void test02() {
		//BiPredicate<String, String> bi=(s1,s2)->s1.equals(s2);
		//可以直接使用返回类型来做简化对象
		//BiPredicate<String, String> bi = String::equals;
		//System.out.println(bi.test("你好","你好"));
		//A<String,Boolean> a = (s1,s2)->s1.equals(s2);
		A<String,Boolean> a = String::equals;
		System.out.println(a.get("你好", "你好"));
		
	}

3.对象的引用::成员方法->简化Lambda结构

@Test
	public void test03() {
		List<String> ls =Arrays.asList("aaa","bbb","ccc");
		//ls.forEach((e)->{System.out.println(e);});
		//将打印语句分离
		ls.forEach(System.out::println);
	}

4类名:静态方法名

@Test
	public void test04() {
		//Comparator<Integer> cs = (a,b)->Integer.compare(a, b);
		Comparator<Integer> cs  = Integer::compare;
		System.out.println(cs.compare(3, 4));
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值