18 java IO

18 java IO

18.2.1 InputStream类型

每一种数据源都有相应的InputStream子类。另外,FilterInputStream也属于一种InputStream,为“装饰器”(decorator)类提供基类,其中,装饰器类可以把属性或有用接口与输入流连接在一起。

18.2.2 OutputStream类型

FilterOutSteam为“装饰器”类提供一个基类。

18.4 Reader和Writer

有时候我们需要把来自于“字节”层次结构中的类和“字符”层次结构中的类结合起来使用。为了实现这个目的,需要用到适配器类:InputStreamReader可以把InputStream转换为Reader,OutputStreamWriter可以把OutputStream转换为Writer。

18.8 标准IO

18.8.1 从标准输入中读取

java提供了System.in,System.err,和System.out。

其中System.out已经被事先包装成了printStream对象。System.err同样是PrintStream,但System.in却是一个没有被加工包装的InputStream。这意味着我们可以立即使用System.out和System.err但是在读取System.in之前必须对其进行包装。

通常我们会用readLine()一次一行读取输入,为此,我们将System.in包装成BufferedReader来使用。这要求我们必须用InputStreamReader把Syste.in转换成Reader。

BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in);
String s;
while(s=stdin.readLine()!=null && s.length!=0){
    System.out.println(s);
}

readLine()会抛出IOException。

18.8.2 将System.out转换成PrintWriter

System.out是一个PrintStream,而PrintStream是一个OutputStream。PirntWriter有一个可以接受OutputStream作为参数的构造器,因此,只要你需要,就可以把System.out转换成PrintWriter。

PrintWriter out = new PrintWriter(System.out,true);
out.println("hello,world");

将第二个参数设成true,以便开启自动清空功能,否则,你可能看不到输出。

18.8.3 标准IO重定向

java的System类提供了一些简单的静态方法调用,以允许我们对标准输入,输出和错误IO流进行重定向。

setIn(InputStream)
setOut(PrintStream)
setErr(PrintStream)

18.10 新IO

旧IO类库中有三个类被修改了,用以产生FileChannel。这三个被修改的类是FileInputStream,FileOutputStream和RandomAccessFile。

18.14 Preferences

Preferences API与对象序列化相比,前者与对象持久性更密切,因为它可以自动存储和读取信息。不过,它只能用于小的,受限的数据集合–我们只能存储基本类型和字符串,并且每个字符串的存储长度不能超过8k。

public class PreferencesDemo{
    Preferences prefs = Preferences.userNodeForPackage(PreferencesDemo.class);
    prefs.put("Localtion","OZ");
    prefs.putInt("Companions",4);
    Prefs.putBoolean("Are there witches",true);

    int usageCount = prefs.getInt("UsageCount",0);
    usageCount++;
    prefs.putInt("UsageCount",usageCount);
    for(String key:prefs.get(key,null){
        print(key + ":" + prefs.get(key,null);
    }
    print(prefs.getInt("Companions",0));
}

当我们第一次运行程序时,UsageCount的值是0,但在随后引用中,它将会是非零值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值