Java基础10

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.BIN
file is 9班名单 电话号码.xls
directory is Friends (1080p x265 Joy)
directory is IDP
directory is JiaXiao
file is locus.txt
file is NestClass$Inner1$Inner2.class
file is NestClass$Inner1.class
file is NestClass$Nested1$Nested2.class
file is NestClass$Nested1.class
file is NestClass.class
file is NestClass.java
file is pagefile.sys
directory is RECYCLER
file is ReturnAnonymous.java
file is ROAD.txt
directory is Sensor
directory is Sex and the City
directory is Sunny证件照
directory is System Volume Information
directory is text
directory is ThinkingInJava
directory is WGHO
file is wgldr
file is WINGHO..
directory is YUANYUANLI论文first
directory is zhic的电影
directory is 壁花少年.2012.中英字幕£CMCT我爱罗
file is 希特勒回来了_bd.mp4
directory is 老友记.第十季.2003.中英字幕£CMCT呆呆熊*/

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

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

详情看http://www.cnblogs.com/dolphin0520/p/3919162.html

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 FileNotFoundException
Creates 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<String,String> h = new HashMap<String,String>();
 /*Set<Entry<String, String>> 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 Summer
age 1
*/

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

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

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

序列化特点:

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

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

 

 

 

你可能感兴趣的:(Java基础10)