Java IO流

https://www.cnblogs.com/ysocean/

 

1、常见流及继承关系:

 

2、RandomAccessFile 随机文件操作:

"r":以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。

"rw" :打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。

"rws":打开以便读取和写入,相对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。

"rwd":打开以便读取和写入,相对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。

JDK 1.6上面写的每次write数据时,"rw"模式,数据不会立即写到硬盘中;而“rwd”,数据会被立即写入硬盘。如果写数据过程发生异常,“rwd”模式中已被write的数据被保存到硬盘,而“rw"则全部丢失。

什么是元数据:任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。

 

3、ObjectOutputStream 对象流操作,被操作的对象需要实现序列化接口

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;

public class Test {
	public static void main(String[] args) throws Exception {
//		OutputStream op = new FileOutputStream("D:/a.txt");
//        ObjectOutputStream ops = new ObjectOutputStream(op);
//        ops.writeObject(new TestBean("a",1));
//        ops.close();
        
        InputStream in = new FileInputStream("D:/a.txt");
        ObjectInputStream os = new ObjectInputStream(in);
        TestBean p = (TestBean) os.readObject();
        System.out.println(p);
        os.close();
	}
}
import java.io.Serializable;

public class TestBean implements Serializable{
	private static final long serialVersionUID = -8594519442420195288L;

	private String l1;
	
	private int l2;

	public String getL1() {
		return l1;
	}

	public void setL1(String l1) {
		this.l1 = l1;
	}

	public int getL2() {
		return l2;
	}

	public void setL2(int l2) {
		this.l2 = l2;
	}

	@Override
	public String toString() {
		return "TestBean [l1=" + l1 + ", l2=" + l2 + "]";
	}

	public TestBean(String l1, int l2) {
		super();
		this.l1 = l1;
		this.l2 = l2;
	}
	
}

不需要被序列化字段定义:

private String name;//需要序列化
transient private int age;//不需要序列化

 

4、FileInputStream:此类用于从本地文件系统中读取文件内容

 

5、BufferedInputStream:此类本身带有一个缓冲区,在读取数据时,先放到缓冲区中,可以减少对数据源的访问,提高运行的效率。

 

6、DataInputStream:该类提供一些基于多字节读取方法,从而可以读取基本数据类型的数据。

 

7、IOUtils:

静态常量:

public static final char DIR_SEPARATOR_UNIX = '/';
public static final char DIR_SEPARATOR_WINDOWS = '\\';
public static final char DIR_SEPARATOR;
public static final String LINE_SEPARATOR_UNIX = "\n";
public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
public static final String LINE_SEPARATOR;


static {
    DIR_SEPARATOR = File.separatorChar;
    
    StringBuilderWriter buf = new StringBuilderWriter(4);
    PrintWriter out = new PrintWriter(buf);
    out.println();
    LINE_SEPARATOR = buf.toString();
    out.close();
}

常用方法:

copy:这个方法可以拷贝流,算是这个工具类中使用最多的方法了。支持多种数据间的拷贝

copyLarge:这个方法适合拷贝较大的数据流,比如2G以上

close:关闭URL连接

closeQuietly:忽略nulls和异常,关闭某个流

contentEquals:比较两个流是否相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值