【java io】复习简单罗列

输入流:从数据源-》程序
输出流:程序-》数据源

字符流:
字符数据:字符流将原始数据解释成字符的序列
依赖编码方法:文件数据存储依赖文件编码方式,字符流的输入和输出是需要编码和解码的(效率低)

字节流:
字节(二进制)数据:字节流会将数据解释成原始的二进制数据
可移植:与主机的编码方法是无关的
效率高:二进制数据不需要编码和解码

面试题1:字符流和字节流的区别
面试题2:javaio中常见类、字节流、字符流、具体实现类、阻塞方法
按照角色分为节点流和处理流
节点流:程序直接连接到实际的数据源,和实际的输入/输出节点相连
处理流:在节点流之上进行了封装,通过封装后的流来进行数据的读写

带缓冲的字节流BufferedInputStream BufferedOutputStream
8*1024 KB
带缓冲的字符流 BufferedReader BufferedWriter

序列化和反序列化
序列化过程:类的对象 转化为字节流 保存到磁盘
反序列化过程:从字节流恢复类的对象
与平台无关

面试题3:序列化的目的?
对象序列化事实上将对象保存在磁盘中,或允许在网络中直接传输序列化的对象,对象序列化机制把内存中的对象转换为与平台无关的二进制流,可以将二进制持久地保存在磁盘中,或者通过网络传输到另外一个网络节点,其他程序一旦获得这种二进制,都可以将二进制流恢复成之前的java对象,实现了java对象的持久化保存,使得对象可以脱离java程序而独立存在;

面试题4:如何去实现序列化?

  • 实现java.io.Serlizable接口,标记当前类是可序列化的,(标记接口,不包含任何方法和字段,只是用于标记),使用Serliable接口去实现序列化,则会产生一个序列化ID,其是一个标识符号,它通常使用对象哈希序列化标记在对象上,可以使用序列化ID对对象实现版本控制
  • 创建一个ObjectOutputStream对象
  • 通过ObjectOutputStream对象的writeObject方法可以输出可序列化的对象

反序列化的步骤?

  • 创建ObjectInputStream对象
  • 通过ObjectInputStream对象的readObject方法读取流中的对象,将对象反序列化为真实的对象

注意:抛出的异常(ClassNotFound)、无需通过构造器、可序列化若有父类父类也需序列化

Java8 新特性
lambda表达式
lambda表达式是一段可以传递的代码,将面向对象中的传递数据 ----》传递行为

Runnable r =new Runnable(){
   @Override
   public void run(){
      sout("hello world");
   }
 }

Runnable r=()->sout("hello world");

()和->:(variable),->是lambda表达式的操作符,将参数和方法的具体逻辑分离,这个线程启动后执行的是->之后的代码片段

fun(int x,int y){
x+y;
}
==》 int sum=(x,y)->x+y;

其实这个和web前端中的js语法相同

Stream
对集合进行链状流式操作
对数据进行处理,负责计算数据,和CPU打交道

一个集合存储Student数据,删选学生名为小王的学生;删选出年龄大于20的学生;通过Stream对其删选

Stream操作步骤

  • 创建一个Stream
  • 使用Stream操作数据,中间流,返回一个流
  • 终止流,终止Stream,直接返回结果
  • 关闭流

基本方法:
filter:接受lambda,从流中排除一些数据
limit(n):使其元素不超过给定对象
skip(n):跳过元素,返回一个扔掉前n个元素的流
distict:通过流所生成的元素的hashcode和equals进行去重
foreach():遍历
map:接受lambda,该函数会被应用到每一个元素
sorted():排序
终止Stream
allMatch(lambda)-检查所有的元素是否都匹配
anyMatch(lambda)-检查至少有一个元素可以匹配
noneMatch(lambda)-检查是否没有一个元素匹配
findFirst-返回第一个元素
findAny-返回任意元素
count-返回流中元素的总个数
max-返回流中元素的最大值
min-返回流中元素最小值
reduce:可以将流中的元素结合起来,得到一个总的值
collect:将流转换为,接受一个Collector接口实现
获取流:1)IntStream stream=Arrays.stream(array);
2)Stream stream=Stream.of(“1”,“2”);
3)Stream stream=Stream.iterate(0,(x)->x+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值