JavaWeb输入输出流

目录

关于内容的读写

关于读InputStream 

End Of Stream(EOS)

处理文本数据(字符数据)

文件内容中填充中文的读操作

利用 Scanner 进行字符读取 

关于写OutputStream

Writer抽象类OutputStreamWriter 实现类

利用 PrintWriter 找到我们熟悉的方法

小结

练习


关于内容的读写

关于读InputStream 

1. 直接读取(以二进制数据的方式读取,表现在代码中 byte为单位)

2. 文本读取

1. java.io.InputStream        输入流

2. 本身是一个抽象类,真正使用过程中要依赖这个抽象的具体实现子类
    FilelnputStream关于文件的输入流
3. 抽象模型

4.要记得关闭
is.close()


import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Arrays;

public class Demo4 {
    public static void main(String[] args) throws Exception {
        InputStream is = new FileInputStream("./hello.txt");
        // FileInputStream 赋值给 InputStream,是因为有继承关系
        // FileInputStream是InputStream的下级类
        // 准备水桶
        // 1024 代表能接 1024 滴(字节)水,我们准备好桶的容量
        byte[] buf = new byte[1024];
        // n是真正接到多少(字节)的水
        // n >= 0&& n < 1024
        int n = is.read(buf); //12
        System.out.println(n);
        // 真正的数据放在 buf 从 [0, 12)
        byte[] bytes = Arrays.copyOf(buf, n);
        for (byte b : bytes) {
            System.out.printf("%02x\n", b);
        }
        is.close();
    }
}

windows 上的换行默认是“\r\n"也写作CRLF

如何利用InputStream进行二进制数据的直接读取

1)一个字节

2)一次读一批

理解EOS (-1)

End Of Stream(EOS)

除了要接水之外,我们还需要一个明确的信号(说明肯定不会有新的数据了)

End Of Stream(EOS)
如果这次接了0滴水
A.是暂时现在没水了?——0

B.还是以后永远没水了?—— -1

一次读一滴

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

public class Demo5 {
    public static void main(String[] args) throws Exception {
        InputStream is = new FileInputStream("./hello.txt");
        while (true) {
            int data = is.read();
            if (data == -1) {
                // 所有数据都被读完了
                break;
            }
            // 否则,data 就是我们取到的数据
            byte b = (byte) data;
            System.out.printf("%02x\n", b);
        }
        is.close();
    }
}

一次读一桶

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

public class Demo6 {
    public static void main(String[] args) throws Exception {
        InputStream is = new FileInputStream("./hello.txt");
        byte[] buf = new byte[5];
        while (true) {
            int n = is.read(buf);
            // n == 0 只是本次没数据,以后还有
            // n == -1 本次没数据,以后也没数据了
            if (n == -1) {
                // 代表数据全部读完
                break;
            }
            for (int i = 0; i < buf.length; i++) {
                byte b = buf[i];
                System.out.printf("%02x\n", b);
            }
        }
        is.close();
    }
}

处理文本数据(字符数据)

处理文本数据(字符数据)
ASCII、Unicode、UTF-8、GBK (GB18030、GB2312)
字符集(char set)
字符编码规则(char encoding)
计算机中的数据<->数字(有范围的整数)
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瘦皮猴117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值