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