第一部分 字节输出流
//1.编码: 把文字转换成字符(使用指定的编码)
String name = "abc我爱你中国";
//byte[] bytes = name.getBytes();//以当前代码默认字符集进行编码(UTF-8) 3+5*3
byte[] bytes = name.getBytes("GBK");//指定编码
System.out.println(bytes.length);
System.out.println(Arrays.toString(bytes));
//2.解码: 把字符转换成对应的中文形式(编码前 和 编码后的字符集必须一致, 否则乱码)
//String rs = new String(bytes);//默认UTF-8
String rs = new String(bytes,"GBK");//指定GBK解码
System.out.println(rs);
//1. 创建一个文件字节输入流管道与源文件接通
//InputStream is = new FileInputStream(new File("io_project\\src\\data.txt"));
InputStream is = new FileInputStream("E:\\idea_java_project\\io_project\\src\\data.txt");
// //2. 读取一个字节返回 (每次读取一滴水)
// int b1 = is.read();
// System.out.println((char)b1);
//
// int b2 = is.read();
// System.out.println((char)b2);
//
// int b3 = is.read();
// System.out.println(b3);//读取完毕,返回-1
//3.使用循环改进
//定义一个变量记录每次读取的字符
int b;
while((b = is.read()) != -1){
System.out.print((char)b);
}
---------------------------------------------
目标: 使用文件字节输入流 每次读取一个字节数组的数据
public class FileInputDemo02 {
public static void main(String[] args) throws Exception{
//1.创建一个字节输入流管道与源文件接通
InputStream is = new FileInputStream("E:\\idea_java_project\\io_project\\src\\data.txt");
//2.要定义一个字节数组,用于读取字节数组
byte[] buffer = new byte[3];
int len = is.read(buffer);
System.out.println("读取了几个字节:"+len);
String rs = new String(buffer);
System.out.println(rs);
int len1 = is.read(buffer);
System.out.println("读取了几个字节:"+len1);
String rs1 = new String(buffer);
System.out.println(rs1);
int len2 = is.read(buffer);
System.out.println("读取了几个字节:"+len2);
String rs2 = new String(buffer,0,len2);
System.out.println(rs2);
//3. 改进使用循环, 每次读取一个字节数组
byte[] buffer = new byte[3];
int len ;//记录每次读取的字节数
while((len = is.read(buffer)) != -1){
//读取多少倒出多少
System.out.print(new String(buffer,0,len));
}
}
}
---------------------------
- 如何使用字节输入流读取中文内容输出不乱吗呢?
定义一个与文件一样大的字节数组, 一次性读取完文件的全部字节
- 直接把文件数组全部读取到一个字节数组可以避免练吗, 是否存在问题?
如果文件过大, 字节数组可能引起内存溢出.
//1.创建一个字节输入流管道与源文件接通
File f = new File("E:\\idea_java_project\\io_project\\src\\data.txt");
InputStream is = new FileInputStream(f);
//2.定义一个字节数组与文件的大小刚刚一样大
byte[] buffer = new byte[(int)f.length()];
int len = is.read(buffer);
System.out.println("读取了多少字节"+len);
System.out.println("文件大小"+f.length());
System.out.println(new String(buffer));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!