文件字节输入流读取字节数据(包含如何避免乱码)
目录
文件字节输入流
方法一
方法二用水桶去装水
如何解决字节流读取中文乱码问题?
这个和前面学的stream流一样,一个流用完就没了
文件字节输入流
方法一
(普通的方式拿水)
public int read() 每次读取一个字节并返回,如果字节没有可读返回-1
package io流;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;public class Test {//aaa.txt 里面装的内容是goodpublic static void main(String[] args) throws IOException {//InputStream w1=new FileInputStream(new File("src/aaa.txt")); InputStream w=new FileInputStream("src/aaa.txt"); //相对路径 不使用文件对象也一样int b1=w.read();//一次读一个字节System.out.println(b1);//打的是ASCII编码 103System.out.println((char)b1); //打字符g 一个英文占一个字节int b2=w.read();int b3=w.read();int b4=w.read();int b5=w.read();System.out.println((char)b2); //输出oSystem.out.println(b5); //没有数据了就会返回-1}}
稍微的改进一下使用循环去读(只是学习语法,性能也是不行,也会有很多的毛病)
它只能一个字节一个字节的去读,如果遇到中文就直接是乱码了,因为中文在UTF-8字符集中3个字节表示一个汉子是不可拆分的,所以一个字节一个字节的去读是 读不了汉字的
package io流;import java.io.FileInputStream;
import java.io.InputStream;public class Test2 {public static void main(String[] args) throws Exception {InputStream w=new FileInputStream("src/aaa.txt");int b;while((b=w.read())!=-1) {System.out.print((char)b); //输出good }}}
方法二用水桶去装水
性能的到了提升(读取中文字符输出无法避免乱码)
只是讲语法
以后桶多大看自己设置
package io流;import java.io.FileInputStream;
import java.io.InputStream;public class Test3 {//aaa.txt 里面现在的内容为 good1234public static void main(String[] args) throws Exception {// TODO Auto-generated method stubInputStream w=new FileInputStream("src/aaa.txt");byte[] buffer=new byte[3]; //定义一个水桶一次装3字节int len=w.read(buffer);//返回读取成功的长度,没水了返回-1//解码String s=new String(buffer);System.out.println("第一次内容:"+s);//输出 gooSystem.out.println("第一次大小:"+len);//输出 3//继续读int len2=w.read(buffer);String s2=new String(buffer);System.out.println("第二次内容:"+s2);//输出 d12System.out.println("第二次读大小:"+len);//输出 3//第三次,还剩两滴水,它要拿三滴水这时候会发生什么
// int len3=w.read(buffer);
// String s3=new String(buffer);
// System.out.println("第二次内容:"+s3);//输出 342
// System.out.println("第二次读大小:"+len3);//输出 2//可以看到它读的大小是2,但是输出的长度确是3个长度//原因是把上次读到的水还在这个通里// s2 d 1 2// s3 3 4 2 这个2就是上面一桶水剩下的//要想避免这种情况要使用这个方法int len3=w.read(buffer);String s3=new String(buffer,0,len3); //去多少就倒出多少,避免了异常情况 第二个参数为起始位置,第三个参数为终止位置System.out.println("第三次内容:"+s3);//输出 34System.out.println("第三次读大小:"+len3);//输出 2}}
使用循环优化(还是不可以避免汉子乱码,但是有可能不乱 ,都是汉字就没事,刚好一个桶装一个汉子)
package io流;import java.io.FileInputStream;
import java.io.InputStream;public class Test4 {// aaa.txt 里面的内容为good1234public static void main(String[] args) throws Exception {InputStream w=new FileInputStream("src/aaa.txt");byte[] buffer=new byte[3];int len; //记录每次拿的长度while((len=w.read(buffer))!=-1) {//解码String s=new String(buffer,0,len);//读多少倒多少System.out.print(s);}//输出good1234}}
如何解决字节流读取中文乱码问题?
一次性读取完全部字节
定义与文件一样大的字节数组读取
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Arrays;public class Test5 {public static void main(String[] args) throws Exception {File f=new File("src/aaa.txt");//创建文件对象InputStream w=new FileInputStream(f);byte[] buffer=new byte[(int) f.length()];//建一个跟文件一样大的字节数组w.read(buffer);//一下读完String s=new String(buffer);System.out.println(s);}}
官方也提供了API
public byte[] readAllBytes() throws IOexception 直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Arrays;public class Test5 {public static void main(String[] args) throws Exception {InputStream w=new FileInputStream("src/aaa.txt");byte[] buffer=w.readAllBytes();String s=new String(buffer);System.out.println(s);}}
文件字节输入流读取字节数据(包含如何避免乱码)相关推荐
- 字节输入流读取字节数据
package com.learn.demo02.InputStream;import java.io.FileInputStream; import java.io.IOException;/*读取 ...
- 字符输入流读取字符数据
package com.learn.Demo04.Reader;import java.io.FileReader; import java.io.IOException;/*字符输入流的使用步骤:1 ...
- python怎么读取csv文件-python如何读取csv数据
python读取csv数据的方法:首先利用csv.reader方法来读取csv文件,该方法会返回一个可迭代的对象csv_read,然后我们可以直接从csv_read对象中获取数据. python中读取 ...
- 实现Excel文件的统一读取功能(包含xls、xlsx、csv格式)
笔者之前使用esayexcel的时候碰到了一个问题,就是easyexcel无法读取csv文件,所以迫不得已之下自己手写了一个统一读取的工具类,在这里分享一下,当然还有许多的不足之处,希望各位看官老爷们 ...
- oracle 直接读取文件,oracle直接读取文本文件数据
oracle利用使用utl_file包 create or replace procedure loadfiledata(p_path varchar2,p_filename varchar2) is ...
- maven中生成文件时缺少proprieties文件解决,输入流读取properties文件 总是为null
文件目录: 在pom.xml文件中添加 <resources><resource><directory>src/main/java</directory> ...
- 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例
读入的字节都写入字节数组中 嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本文件或二进制文件. 一个示例是将文件的内容转换为String ...
- 详解字节输入流InputStream
(一)InputStream:字节输入流 java.io.InputStream:字节输入流 此抽象类是表示字节输入流的所有类的超类 定义了所有子类共性的方法 int read()从输入流中读取数据的 ...
- python获取mysql中的数据供js调用_python 读取mysql数据至csv文件中,并发送邮件
test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...
最新文章
- 数据字典 加载到 web 项目的 application 全局
- sql查询每个学生的最高成绩mysql语句
- Solr之搭建Solr6.0服务并从Mysql上导入数据
- Python 程序打包 -- 使用pyinstaller
- python语言format用法_python基础_格式化输出(%用法和format用法)
- 8.Eclipse中创建Maven Web项目
- Discrete Logging hunnu10590 pku2417 fzu 1352 hit 1928 zoj 1898
- mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案
- POJ-2407 欧拉函数
- MySQL————表维护相关低频操作总结
- DataDir and DirectoryFactory in SolrConfig
- Multiresolution Recurrent Neural Networks: An Application to...
- JavaScript 键盘事件处理
- Julia: 用Julia操作Redis数据库及一些用法
- linux 卸载 java_Linux安装卸载JDK完整步骤
- 《数字图像处理 第三版》(冈萨雷斯)——第三章 灰度变换和空间滤波
- CCF系列题解--2018年9月第一题 卖菜
- 二倍图三倍图什么意思_什么是二倍图三倍图
- 马云的SNS梦美好却残酷
- 小白Bert系列-生成pb模型,tfserving加载,flask进行预测
热门文章
- PES,TS,PS,RTP等流的打包格式解析之RTP流
- java-php-python-ssmHY口腔门诊系统计算机毕业设计
- 「网工必备」五款工作学习必备软件免费下载
- 关于Cisco Packet Tracer三层交换机路由配置
- redmine mysql2 报错_安装redmine
- iOS 知识点大总结(转)
- 257页12万字城市园林绿化养护方案
- 年度最精彩研究,CVPR 2017六篇最佳论文介绍(附打包下载)| CVPR 2017
- linux下查看java进程日志,linux 下查看java进程
- 查看mysql队列脚本_常用查询脚本