博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础10
阅读量:6897 次
发布时间:2019-06-27

本文共 4005 字,大约阅读时间需要 13 分钟。

hot3.png

1、Java IO流

Java中输入输出都被称为抽象的流,流可以看作一组有序的字节集合,数据在两设备之间的传输。

流分为两大类:字节类和字符类。字节流以字节(8bit)为单位,包含两个抽象类:InputStream和OutputStream;字符流以字符为单位(16bit)为单位,包含两个抽象类:Reader和Writer。两者最主要的区别是:字符流用到了缓存,字节流在处理输入输出时不会用到缓存。Java IO类在设计时采用装饰者模式,可以在运行时给对象动态的添加一些额外的职责。

2、File类

管理文件和目录。

 

 package Four;//列出目录下所有文件和文件夹import java.io.File;public class FileTest { public static void main(String[] args){  File file = new File("F:\\");//File(String pathname)  //判断对象对应的文件是否存在  if(!file.exists()){   System.out.println("directory is empty");   return;  }  File[] fileList = file.listFiles();//返回目录中所有文件的File对象   for(int i = 0; i < fileList.length; i++){    if(fileList[i].isDirectory())//判断对象表示的是否是文件夹      System.out.println("directory is "+ fileList[i].getName());   else    System.out.println("file is "+ fileList[i].getName());  } }}/*directory is $RECYCLE.BINfile is 9班名单 电话号码.xlsdirectory is Friends (1080p x265 Joy)directory is IDPdirectory is JiaXiaofile is locus.txtfile is NestClass$Inner1$Inner2.classfile is NestClass$Inner1.classfile is NestClass$Nested1$Nested2.classfile is NestClass$Nested1.classfile is NestClass.classfile is NestClass.javafile is pagefile.sysdirectory is RECYCLERfile is ReturnAnonymous.javafile is ROAD.txtdirectory is Sensordirectory is Sex and the Citydirectory is Sunny证件照directory is System Volume Informationdirectory is textdirectory is ThinkingInJavadirectory is WGHOfile is wgldrfile is WINGHO..directory is YUANYUANLI论文firstdirectory is zhic的电影directory is 壁花少年.2012.中英字幕£CMCT我爱罗file is 希特勒回来了_bd.mp4directory is 老友记.第十季.2003.中英字幕£CMCT呆呆熊*/

3、Java NIO(Nonblocking IO)非阻塞IO

在网络编程中有非常重要的作用。非阻塞IO出现之前,Java是通过传统的Socket来实现基本的网络通信功能的,若client还没有对server发起连接请求,accept就会阻塞,若连接成功,当数据还没成功,对read的调用同样会阻塞。当处理多个连接是,需要采用多线程方式,由于每个线程都有自己的占空间,而阻塞会导致大量线程进行上下文切换,使程序运行效率低下,因此Java4引入NIO来解决这个问题。

详情看

4、Java序列化

对象持久化的方式。是一种将对象以一连串的字节描述的过程。所有要实现序列化的类都必须implements Serializable接口。

package Four;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;public class PeopleSerializable implements Serializable{ private String name; private int age; public PeopleSerializable(){  this.name = "Summer";  this.age = 1; } public int getAge(){  return age; } public void setAge(int age){  this.age = age; } public String getName(){  return name; } public void setName(String name){  this.name = name; } public static void main(String[] args){  PeopleSerializable p = new PeopleSerializable();  ObjectOutputStream oos = null;  ObjectInputStream ois = null;  try { /*java.io.FileOutputStream.FileOutputStream(String name) throws FileNotFoundExceptionCreates a file output stream to write to the file with the specified name.*///语句执行后自动在F盘生成people.out    FileOutputStream fos = new FileOutputStream("F:\\people.out");   oos = new ObjectOutputStream(fos);   oos.writeObject(p);   oos.close();  } catch (Exception e) {   // TODO Auto-generated catch block   //e.printStackTrace();  }  PeopleSerializable p1;  try {   FileInputStream fis = new FileInputStream("F:\\people.out");   ois = new ObjectInputStream(fis);   p1 = (PeopleSerializable)ois.readObject();   System.out.println("name " + p1.getName());   System.out.println("age " + p1.getAge());   ois.close();  } catch (Exception e) {   // TODO Auto-generated catch block   e.printStackTrace();  } } HashMap
 h = new HashMap
(); /*Set
> java.util.HashMap.entrySet()Returns a Set view of the mappings contained in this map. */ Iterator i =  h.entrySet().iterator(); @SuppressWarnings("rawtypes") Map.Entry e = (Entry) i.next();}/*name Summerage 1*/

序列化会影响系统性能。通常在下列情况下使用:

1)需要通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中。

2)序列化能实现深复制,即可以复制引用的对象。(待理解)

序列化特点:

1)若一个类能被序列化,那么它的子类也可以序列化

2)static、transient两种类型的数据成员不能被序列化

 

 

 

转载于:https://my.oschina.net/doudoulee/blog/672440

你可能感兴趣的文章
Spring系列之Spring框架和SpringAOP集成过程分析(十一)
查看>>
云数据库产品月刊·5月刊
查看>>
50行代码的MVVM,感受闭包的艺术
查看>>
Android第三方开源图片裁剪截取:cropper
查看>>
直播转点播实践
查看>>
基于Java语言构建区块链(二)—— 工作量证明
查看>>
Python黑科技:50行代码运用Python+OpenCV实现人脸追踪
查看>>
获取高德地图的四级地址
查看>>
图像识别落地B端应用,商业化的“绣球”先抛给了哪些行业?
查看>>
Elasticsearch结构化搜索_在案例中实战使用term filter来搜索数据
查看>>
Eclipse在Project Explorer项目归组及分模块显示
查看>>
超全总结:神经网络加速之量化模型 | 附带代码
查看>>
批量将xml文件转json并写入文件
查看>>
python web开发之——Flask入门教程
查看>>
区块链每日一问 | 什么是区块链的“分叉”?
查看>>
Java并发编程之CountDownLatch
查看>>
AI版本的AK-47或问世,可以在无人操控下自主决定射击
查看>>
Bootstrap学习笔记--表格
查看>>
JVM内存区域与多线程
查看>>
光谱响应与量子效率
查看>>