读写流

package top;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;

/**
 * description:
 *
 * @author: dawn.he QQ:       905845006
 * @email: dawn.he@cloudwise.com
 * @email: 905845006@qq.com
 * @date: 2019/8/19    10:45 PM
 */
public class iodemo {

    public static void main(String[] args) throws IOException {
        iodemo io = new iodemo();
//        io.InputStream();
        io.BufferedInputStream();
//        io.InputStreamReader();
//        io.BufferedReader();
//        io.Reader();
    }
    //InputStream、OutputStream(字节流)
    public void InputStream() throws IOException {
        //读取文件(字节流)
        InputStream in = new FileInputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/1.txt");
        //写入相应的文件
        OutputStream out = new FileOutputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/2.txt");
        //读取数据
        //一次性取多少字节
        byte[] bytes = new byte[2048];
        //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
        int n = -1;
        //循环取出数据
        while ((n = in.read(bytes, 0, bytes.length)) != -1) {
            //转换成字符串
            String str = new String(bytes, 0, n, "UTF-8"); //这里可以实现字节到字符串的转换,比较实用
            System.out.println(str);
            //写入相关文件
            out.write(bytes, 0, n);
        }
        //关闭流
        in.close();
        out.close();
    }


    public void BufferedInputStream() throws IOException {

        //读取文件(缓存字节流)
        BufferedInputStream in = new BufferedInputStream(new FileInputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/1.txt"));
        //写入相应的文件
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/2.txt"));
        //读取数据
        //一次性取多少字节
        byte[] bytes = new byte[2048];
        //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
        int n = -1;
        //循环取出数据
        while ((n = in.read(bytes, 0, bytes.length)) != -1) {
            System.out.println(n);
            //转换成字符串
            String str = new String(bytes, 0, n, "UTF-8");
            System.out.println(str);
            //写入相关文件
            out.write(bytes, 0, n);
        }
        //清楚缓存
        out.flush();
        //关闭流
        in.close();
        out.close();

    }


    public void InputStreamReader() throws IOException {
        //读取文件(字符流)
        InputStreamReader in = new InputStreamReader(new FileInputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/1.txt"), "UTF-8");
        //写入相应的文件
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/2.txt"));
        //读取数据
        //循环取出数据
        int len = -1;

        while ((len = in.read()) != -1) {
            System.out.print((char)len+" ");
            System.out.println(len);
            //写入相关文件
            out.write(len);
        }
        //清楚缓存
        out.flush();
        //关闭流
        in.close();
        out.close();
    }

    public void BufferedReader() throws IOException {
        //读取文件(字符流)
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/1.txt"), "UTF-8"));//这里主要是涉及中文
        //BufferedReader in = new BufferedReader(new FileReader("d:\\1.txt")));
        //写入相应的文件
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/2.txt"), "UTF-8"));
        //BufferedWriter out = new BufferedWriter(new FileWriter("d:\\2.txt"));
        //读取数据
        //循环取出数据
        String str = null;
        while ((str = in.readLine()) != null) {
            System.out.println(str);
            //写入相关文件
            out.write(str);
            out.newLine();
        }

        //清楚缓存
        out.flush();
        //关闭流
        in.close();
        out.close();
    }

    public void Reader() throws IOException {
        //读取文件(字符流)
        Reader in = new InputStreamReader(new FileInputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/1.txt"), "UTF-8");
        //写入相应的文件
        PrintWriter out = new PrintWriter(new FileWriter("/Users/heliming/IdeaProjects/democloud/kotlindemo/2.txt"));
        //读取数据
        //循环取出数据
        byte[] bytes = new byte[1024];
        int len = -1;
        while ((len = in.read()) != -1) {
            System.out.print((char)len+" ");
            System.out.println(len);
            //写入相关文件
            out.write(len);
        }
        //清楚缓存
        out.flush();
        //关闭流
        in.close();
        out.close();
    }
}
(一)“字节”的定义

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。



(二)“字符”的定义

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。



(三)“字节”与“字符”

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。



字节 (byte):8个二进制位为一个字节(B),最常用的单位。计算机存储单位一般用B,KB,MB,GB,TB,PB,EB,ZB,YB,BB来表示,它们之间的关系是:
  1B(Byte字节)=8bit
  1KB (Kilobyte 千字节)=1024B,
  1MB (Mega byte 兆字节 简称“兆”)=1024KB,
  1GB (Giga byte 吉字节 又称“千兆”)=1024MB,
  1TB (Tera byte 万亿字节 太字节)=1024GB,其中1024=2^10 ( 2 的10次方)

用一个txt文档做实验
1000个汉字---utf-8编码格式---占用2.95k,接近3k。这是因为utf-8编码格式下1000个字符占3000字节,相当于3000B,接近3k。
---asci编码格式下,2k
---unicode编码格式下,2k

转载于:https://my.oschina.net/u/3730149/blog/3094760

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值