java中的字节流和字符流

这篇博客详细介绍了Java中的字节流和字符流,包括字节输入流InputStream的各种读取场景,如读取中文和英文,以及字节输出流OutputStream的写入方法,如写入英文字符和字节数组。同时,还涵盖了字符输入流InputStreamReader和字符输出流OutputStreamWriter的使用,如使用read()、write(int c)等方法进行数据的读写操作。
摘要由CSDN通过智能技术生成

前言

字节流:分为字节输入流(InputStream)和字节输出流(OutputStream)
字符流:分为字符输入流(InputStreamReader)和字符输出流(OutputStreamWriter)

一、字节流

1.字节输入流(InputStream)

说明:字节输入流是读取外部文件的内容,输入到程序中,所以叫输入流,因为是按照字节为单位读取的所以叫字节输入流。
使用方式:创建流对象,并调用流对象的read方法从流中读取数据。
场景1)使用read(byte[] bytes)方法读取中文
	/**
     * read(byte[] bytes)方式使用:根据设定的字节数组byte[]的长度从文件中读取相应长度字节的数据,并将读取
     * 到的字节数据存放到该byte[]数组中,装满为止;不足的部分就空着。
     */
    @Test
    public void inputStream1() throws IOException {
   

        //创建字节输入流对象并与文件关联,源文件test.txt —> 流对象 —> 流对象.read读取
        FileInputStream fileInputStream = new FileInputStream("src/test/resources/test.txt");
        /*
         * 设定字节数组长度,注意:如果文件全部是英文及字符,则byte[]数组长度不管设置多少,读取后转换都不会出现乱码,
         * 但如果文件中有中文汉字,则byte[]数组长度设定不合理,就会出现读取转化后出现乱码的现象。
         * 因为在UTF-8编码规则下,1个英文字符对应1个字节,以字节为单位读取自然不会乱码;而1个汉字及中文标点对应3个
         * 字节,以字节为单位按照设定的字节数读取时很容易出现乱码
         */
        byte[] bytes = new byte[37];
        //每次从流中读取37个字节长度的数据,并将读取到的数据以字节形式存放到bytes数组中
        int len = fileInputStream.read(bytes);
        while (len != -1){
   
            System.out.println("len:"+len);
            //将存储到byte[]数组中的字节转换成字符串并打印出来
            System.out.println(new String(bytes,0,len));
            len = fileInputStream.read(bytes);
        }
        fileInputStream.close();
    }
场景2)使用read()方法读取英文
    /**
     * 字节输入流(InputStream):read()读取英文字符文件
     */
    @Test
    public void inputStream2() throws IOException {
   
        FileInputStream fileInputStream = new FileInputStream("src/test/resources/test1.txt");
        //每次读取1个字节
        int read = fileInputStream.read();
        while (read != -1){
   
            //read()方法返回的是ascii码值,通过char转成英文字符
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值