java基础--IO

       数据在计算机内存储转换必须要用到IO操作,了解IO操作机制,对我们编码时针对文件操作,提高系统性能,磁盘存储,数据网络传输等都有很大的帮助。


      (1) java的IO流的概念是数据从源头到达目的存储地的有序数列,正是这些输入输出流实现了java的输入输出。


       分类:我们最熟悉的要数字节流和字符流了,按照计算机的二进制存储规则,字节流是操作8位二进制位,字符流操作的基本单位则是16位二级制位单位。例如能够被计算机能够直接执行的是字节流,以二进制的形式存在于计算机上;txt文件则以字符的形式存在。


       单纯针对字节流进行读写操作,流程较为复杂,所以提出了更加高级的处理流的概念。它主要的作用为:增加缓冲的方式来提高性能;提高易操作性。


        操作对比


        使用文件字节流将文件内容读入到内存代码

try(FileInputStream stream =new FileInputStream("example.java")){
	byte[] buff=new byte[1024];
	int hasRead=0;
	while((hasRead==stream.read(buff))>0){
		System.out.println(new String(buff,0,hasRead));
	}
	stream.close();
}


        上面代码,将字节流定义到try()里面能够保证在字节流读取的代码中出现问题,自动关闭,防止内存溢出。我们可以看出存在一个很大的问题,如果文件字数特别多的情况下,要想将字节流转化为我们能够认识的便于操作的string类型,需要通过new String()的方式。还要通过循环字节流的方式进行,定义的局部变量增多,空间消耗增多;但它能够很快被计算机识别,在计算机存储操作很方便。


        使用包装类对IO流进行操作

try(FileInputStream stream=new FileInputStream("inputStream.java");
	PrintStream ps=new PrintStream(stream)){
	System.out.println(new 外部类);
}


      如上代码,PrintStram将字节流进行包装,直接打印外部对象,简化了打印操作。


      此外,为将二进制字节流编码为易于人所理解的字符流,java的IO操作提供了转换流的概念。最常使用的是InputStream和OutputStream.


      (2)java的IO操作提到另外一个重要的概念便是序列化,将对象转化为字节序列便于存储在磁盘或在网络上进行传输。我们要实现跨平台操作,必须将传递的参数,返回值进行序列化。


         java提供的对象流对javaBean实现序列化,该javaBean必须实现java.io.serializable,举例:

try(ObjectOutputStream oos=new ObjectOutputStream(new FileInputStream("example.java"))){
	Person per=new Person();
	per.setName("张三");
	oos.writeObject(per);
}


       我们在实际应用中更加倾向于json做序列化,主要的是json与语言无关,扩展能力更强。尤其在前端数据从js向后台Java传输过程中首选了json。这里有一篇关于json字符串与java序列化的对比《 Java序列化与JSON序列化大比拼


     (3)NIO的改进


       java 1.4首次提出NIO的概念,改进的直接方式是将磁盘数据直接映射如内存,这样代码在执行时就可以像访问内存数据一样了,在NIO包中添加了Channel和buffer相关类。


       java 7则在NIO的基础上又一次做出巨大改进,使用Paths和Files两个核心类使得文件访问更加全面,灵活。通过WatchService启动后台线程来监听文件变化避免无线循环访问。







       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值