1 JAVA.IO字节流
inputstream.png
- //用ByteArrayOutputStream暂时缓存来自其他渠道的数据
- ByteArrayOutputStream data = new ByteArrayOutputStream(1024); //1024字节大小的缓存区
- data.write(System.in.read()); // 暂存用户输入数据
- //将data转为ByteArrayInputStream
- ByteArrayInputStream in = new ByteArrayInputStream(data.toByteArray());
- //java对象的写入
- FileOutputStream fileStream = new FileOutputStream("example.txt");
- ObjectOutputStream out = new ObjectOutputStream(fileStream);
- Example example = new Example();
- out.writeObject(example);
- //java对象的读取
- FileInputStream fileStream = new FileInputStream("example.txt");
- ObjectInputStream in = new ObjectInputStream(fileStream);
- Example = (Example) in.readObject();
- // 创建一个发送者对象
- Sender sender = new Sender(); // 创建一个接收者对象
- Receiver receiver = new Receiver(); // 获取输出管道流
- // 获取输入输出管道流
- PipedOutputStream outputStream = sender.getOutputStream();
- PipedInputStream inputStream = receiver.getInputStream();
- // 链接两个管道,这一步很重要,把输入流和输出流联通起来
- outputStream.connect(inputStream);
- sender.start();// 启动发送者线程
- receiver.start();// 启动接收者线程
- InputStream in1 = new FileInputStream("example1.txt");
- InputStream in2 = new FileInputStream("example2.txt");
- SequenceInputStream sequenceInputStream = new SequenceInputStream(in1, in2);
- //数据读取
- int data = sequenceInputStream.read();
- ByteArrayOutputStream out = new ByteArrayOutputStream(2014);
- //数据写入,使用DataOutputStream装饰一个InputStream
- //使用InputStream具有对基本数据的处理能力
- DataOutputStream dataOut = new DataOutputStream(out);
- dataOut.writeDouble(1.0);
- //数据读取
- ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
- DataInputStream dataIn = new DataInputStream(in);
- Double data = dataIn.readDouble();
2 JAVA.IO字符流
21.png
- //InputStream转为Reader
- InputStream inputStream = new ByteArrayInputStream("程序".getBytes());
- InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
- //OutputStream转为Writer
- OutputStream out = new FileOutputStream("example.txt");
- OutputStreamWriter writer = new OutputStreamWriter(out);
- //以字符为单位读写
- writer.write(reader.read(new char[2]));
3 乱码问题和字符流
- ByteArrayInputStream in = new ByteArrayInputStream("程序大法好".getBytes());
- byte[] buf = new byte[2]; //读取流的两个字节
- in.read(buf); //读取数据
- System.out.println(new String(buf)); //乱码
- ---result----
- � //乱码
- InputStreamReader reader =
- new InputStreamReader(inputStream, StandardCharsets.UTF_8);
4 字符集和字符编码的概念区分
范围 Unicode(Binary) UTF-8编码(Binary) UTF-8编码byte长度 U+0000~U+007F 00000000 00000000 00000000 0XXXXXXX 0XXXXXX 1 U+0080~U+07FF 00000000 00000000 00000YYY YYXXXXXX 110YYYYY 10XXXXXX 2 U+0800~U+FFFF 00000000 00000000 ZZZZYYYY YYXXXXXX 1110ZZZZ 10YYYYYY 10XXXXXX 3 U+010000~U+10FFFF 00000000 000AAAZZ ZZZZYYYY YYXXXXXX 11110AAA 10ZZZZZZ 10YYYYYY 10XXXXXX 4
- System.out.println(Charset.defaultCharset()); //输出java默认编码
- for (byte item : "程序".getBytes(StandardCharsets.UTF_16)) {
- System.out.print("[" + item + "]");
- }
- System.out.println("");
- for (byte item : "程序".getBytes(StandardCharsets.UTF_8)) {
- System.out.print("[" + item + "]");
- }
- ----result----
- UTF-8 //java默认编码UTF-8
- [-2][-1][122][11][94][-113] //UTF_16:6个字节?
- [-25][-88][-117][-27][-70][-113] //UTF_8:6个字节 正常
- for (byte item : "程".getBytes(StandardCharsets.UTF_16)) {
- System.out.print("[" + item + "]");
- }
- ---result--
- [-2][-1][122][11]
根据调研机构Forrester Research公司最近的一项调查,在数字化转型和软件即服务...
调用 PutObject 接口上传文件(Object)。 注意事项 添加的Object大小不能超过5 ...
操作场景 您可以基于裸金属服务器实例创建私有镜像,将实例的系统盘数据完整地复...
证书审核时间取决于您和CA机构之间的配合。请留意您在申请证书时预留的邮箱和电...
架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案。 一...
GetBucketLocation 接口用于查看存储空间(Bucket)的位置信息。只有Bucket的拥...
本文介绍云服务器ECS大数据型实例规格族的特点,并列出了具体的实例规格。 推荐 ...
这部分文档将介绍创建和使用E-HPC集群的基本流程,引导您一站式完成集群的创建、...
本文作者 阿里云技术专家李雨前 引言 业务上云常态化 业务在云上资源的选购、弹...
虽然云和容器的崛起,容器成了日常。容器的安全要求也随之而来,如何确定一个最适...