java之 21天 (二) 操作基本数据类型,字节数组的流 和 字符编码

本文介绍Java中基本数据类型流对象(DataInputStream和DataOutputStream)的使用方法,包括读写int、boolean、double等类型的数据及特定UTF-8编码字符串的处理。同时探讨了字节数组和字符数组流对象的运用,以及字符编码转换的原理和技术实现。
[size=medium][b]操作基本数据类型的流对象[/b][/size]


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
* 操作基本数据类型的流对象
* DataInputStream 和 DataOutputStream
*/
public class DataStream {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//writeData();
//readDate();
//writeUTFDemo();
//writeUTFADemo();
//readUTFDemo();
readUTFADemo();

}

//常用 字符编码 读取
public static void readUTFADemo() throws IOException{
InputStreamReader isr=new InputStreamReader(new FileInputStream("E:\\utf.txt"),"UTF-8");
char[] buf=new char[1024];
int len=isr.read(buf);
String s=new String(buf,0,len);
System.out.println(s);

}
//修改版定UTF 专门读取方法
public static void readUTFDemo() throws IOException{
DataInputStream dis=new DataInputStream(new FileInputStream("E:\\utfdata.txt"));
//DataInputStream dis=new DataInputStream(new FileInputStream("E:\\utf.txt")); //会报错, EOFEXception
String s=dis.readUTF();
System.out.println(s);
dis.close();
}

//常用的 utf 写入
public static void writeUTFADemo() throws IOException{
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("E:\\utf.txt"),"UTF-8");
osw.write("你好");
osw.close();
}

//修改版定UTF 读取 只能使用专门的指定 读取方法
public static void writeUTFDemo() throws IOException{
DataOutputStream dos=new DataOutputStream(new FileOutputStream("E:\\utfdata.txt"));
dos.writeUTF("你好"); //与机器无关的编码
dos.close();
}

//读取 int boolean double
public static void readDate() throws IOException{
DataInputStream dis=new DataInputStream(new FileInputStream("E:\\data.txt"));
int num=dis.readInt();
boolean flag=dis.readBoolean();
Double dd=dis.readDouble();
System.out.println(num+"\\"+flag+"\\"+dd);
}

//写入 int boolean double
public static void writeData() throws IOException{
DataOutputStream dos=new DataOutputStream(new FileOutputStream("E:\\data.txt"));
dos.writeInt(234); //4个字节
dos.writeBoolean(true); //1个字节
dos.writeDouble(89555.455); //8个字节
dos.close();

}
}


[b]用于操作字节数组,字符数组 的流对象[/b]


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 用于操作字节数组的流对象
* ByteArrayInputStream: 在构造的时候 需要接口数据源,而且数据源是一个字节数组
* ByteArrayOutputStream: 在构造的时候,不用定义数据目的, 因为该独享中已经内存封装了一个可变长度的字节数组.
* 这就是 数据目的
*
* 用于操作字符数组的流对象
* charArrayReader
* charAarrayWriter
*
* 因为这连个个流对象操作都是数组,并没有使用系统资源,所以不需要进行关闭.
*
*
* 在 讲流的操作规律的时候
* 源设备:
* 键盘:System.in, 硬盘:FileStream ,内存: ArrayStream
* 目的设备
* 键盘:System.out, 硬盘:FileStream ,内存: ArrayStream
*
* 用流的读写思想来操作数组
*
*/
public class ByteArrayStream {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//数据源
ByteArrayInputStream bis=new ByteArrayInputStream("adfsde".getBytes());

ByteArrayOutputStream bos=new ByteArrayOutputStream();

System.out.println(bos.size()); //缓冲的大小

int by=0;
while((by=bis.read())!=-1){
bos.write(by);
}
System.out.println(bos.size());
System.out.println(bos.toString());

bos.writeTo(new FileOutputStream("E:\\IOArray.txt"));


}

}

[size=medium][b]字符编码[/b][/size]


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

/**
* 字符编码
* 字符编码的出现为了方便操作字符
* 更重要的是加入了编码转换
* 通过子类转换流来完成
* InputStreamReader
* OutputStreamWriter
* (PrintStream,PrintWriter 也加入编码表)
* 在两个对象构造的时候可以加入字符集.
*
* 编码表的由来
* 计算机只能识别二进制数据,早起由是电信号
* 为了方便应用计算机,让它可以识别个个国家的文字
* 就将各个国家的文字用数字来表示,并一对一,形成一张表.
* 这就是编码表
*
* 常见的编码表
* ASCII:美国标准信息交换码
* 用一个字节的7位可以表示.
* ISO8859-1:拉丁码表.欧洲码表
* 用一个字节的8位可以表示.
* GB2312:中国的中文编码表.
* 6000-7000 多
* GBK:中国的中文编码表升级.融合了更多的中文文字符号.
* 上万了
* Unicode: 国际标准码,融合了多种文字.
* 所有文字都有两个字节来表示,java语言使用的就是unicode
* UTF-8:unicode transform format -8:最多三个字节来表示一个字符.一个字节 装不下,采用两个 ,两个不行 三个.
*
*
*
* 编码: 将字符串 --变成 ---字节数组
* String---byte: str.getBytes(charsetname); //默认是 GBk
* 解码: 将字节数组 ---变成 ---字符串
* byte[] ---String: new String(byte,charsetname); 默认 gbk
*
*/
public class EncodeDemo {

public static void main(String[] args) throws IOException{

//writeText();
//readText();
//encodeDemo();
encodeDemo2();
}
public static void encodeDemo2() throws IOException{
String s="你好";
byte[] b1=s.getBytes("GBK");

System.out.println(Arrays.toString(b1));
String s1=new String(b1,"ISO8859-1");//已经是 乱码的文字了
System.out.println(s1);

byte[] b2=s1.getBytes("ISO8859-1");
System.out.println(new String(b2,"GBK"));
}

public static void encodeDemo1() throws IOException{
String s="你好";
byte[] b1=s.getBytes("GBK");
System.out.println(Arrays.toString(b1));

String s1=new String(b1,"GBK");
System.out.println(s1);
}

public static void encodeDemo() throws IOException{
String s="你好";
byte[] b1=s.getBytes();
System.out.println(Arrays.toString(b1));

String s1=new String(b1);
System.out.println(s1);
}


public static void readText() throws IOException{
InputStreamReader isr=new InputStreamReader(new FileInputStream("E:\\gbk.txt"));

char [] buf=new char[10];
int len=isr.read(buf);
String s=new String(buf,0,len);
System.out.println(s);
}
//默认的使用gbk
public static void writeText() throws IOException{
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("E:\\gbk.txt"));

osw.write("你好"); //4个字节: 默认的是 GBK 6个字节 UTF-8 8个自己 修订版UTF
osw.close();
}


}
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀程设计、服务间通信机制、分布式事务实现系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值