java中字节流与字符流以及字节流多余字节问题
1.字节流
字节流byte为单位对文件的数据进行写入与读取操作。字节的方式在复制音频图片文件时比较适用,但在对于普通文件的读写上有两大缺陷:
  第一,字节流在读取中文字符时,若设定的字节数组长度刚好末尾的中文字不能获取完整,那么容易将这个字符拆开而造成乱码
  第二,字节流在读取数据时,对于取不满字节数组的数据会自动进行填充,而该填充编译器无法识别,就会造成末尾会输出许多方框,关键是转码方面的问题
  
String name = "D:/test.txt";
File file = new File(name);
if(!file.exists()) {
file.createNewFile();
}
OutputStream os = new FileOutputStream(file);
byte[] b = new byte[1024];
b = "Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念...".getBytes();
os.write(b, 0, b.length);
System.out.println("nnnnn");
os.flush();
os.close(); OutputStream os2 = new FileOutputStream("test1.txt");
InputStream is = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
b = new byte[100]; //ByteBuffer bytebuf = ByteBuffer.allocate(1024);
//int sum = 0; byte[] b2 = new byte[100];
int flag = 0 ;
while((flag = bis.read(b)) != -1) {
//bytebuf.put(b);
//sum += flag;
os2.write(b,0,flag);
} //byte[] bytes = new byte[sum];
// for(int i = 0; i < sum; i++) {
// bytes[i] = bytebuf.get(i);
//} //String test = new String(bytes,"utf-8");
//System.out.println(test);;
os2.close();
bis.close();
这里推荐一种简单的方法,read方法会返回该字节数组的长度,可以采用这个将数据写入
另外一种解决方案可以参考https://blog.csdn.net/woshimalingyi/article/details/49226463
https://www.cnblogs.com/jiduoduo/p/6397454.html,ByteBuffer的应用
2.字符流
字符流相对简单,能够通过readLine读取一行的数据
// /**
// * 文字采用字符流,图片等采用字节流
// */
// InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
// BufferedReader rd = new BufferedReader(isr);
//
// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("test1.txt"));
// BufferedWriter bw = new BufferedWriter(osw);
//
// String str = "";
// while((str = rd.readLine()) != null){
// System.out.println(str);
// bw.write(str);
// }
// bw.close();
// rd.close();
java中字节流与字符流以及字节流多余字节问题的更多相关文章
- 牛客网Java刷题知识点之输入流、输出流、字节流、字符流、字节流的抽象基类(InputStream、OutputStream)、字符流的抽象基类(Reader、Writer)、FileWriter、FileReader
		
不多说,直接上干货! IO流用来处理设备之间的数据传输. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. IO流按操作数据分为两种:字节流和字符流. IO流按流向分为:输 ...
 - 理解Java中字符流与字节流的区别
		
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
 - 理解Java中字符流与字节流
		
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...
 - 理解Java中字符流与字节流的区别(转)
		
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
 - java 笔记(4) ——  java I/O 流、字节流、字符流
		
Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...
 - Java字节流与字符流
		
九.字节流与字符流 9.1 IO的分类 <段落>根据数据的流向分为:输入流和输出流. 输入流 :把数据从其他设备上读取到内存中的流. 输出流 :把数据从内存 中写出到其他设备上的流. 数据 ...
 - Java IO 字节流与字符流 (二)
		
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
 - Java之IO初识(字节流和字符流)
		
IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...
 - Java字节流和字符流,是时候总结一下IO流了
		
目录 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 为什么字符流需要 ...
 
随机推荐
- [转] 如何在 CentOS7 中使用阿里云的yum源
			
[From] https://www.cnblogs.com/lpbottle/p/7875400.html 1. 备份原来的yum源 mv /etc/yum.repos.d/CentOS-Base. ...
 - HLS:OpenCV和RTL代码转换关系
			
OpenCV 图像处理是基于存储器帧缓存而构建的, 它总是假设视频帧数据存放在外部 DDR 存储器中. 由于处理器的小容量高速缓存性能的限制, 因此, OpenCV 访问局部图像性能较差. 并且, 从 ...
 - (转)[小工具] Linux下列格式化工具 - column
			
当你看到Linux下命令输出的列歪歪扭扭时,是不是看着很不爽?column 命令就可以方便地解决这个问题. 比如: 我们一般就只用到上面这一个用法. column的其他用法如下: 选项 含义 -c 字 ...
 - Linux网络编程服务器模型选择之并发服务器(下)
			
前面两篇文章(参见)分别介绍了循环服务器和简单的并发服务器网络模型,我们已经知道循环服务器模型效率较低,同一时刻只能为一个客户端提供服务,而且对于TCP模型来说,还存在单客户端长久独占与服务器的连接, ...
 - javascript的HelloWorld
			
javascript:边解释边执行.是一种解释型语言. defer属性,延迟执行代码,(整个页面加载完之后,window.onload) 代码: <!DOCTYPE HTML PUBLIC &q ...
 - linux mint19 解决docker必须使用sudo问题
			
1 安装完docker 使用时,提示权限不够 ~$ docker info Got permission denied while trying to connect to the Docker da ...
 - web开发之缓存
			
以数据为驱动的web站点,当访问量增大后,由于频繁的从DB中读取数据,使得DB服务器的压力大增,从而影响系统的性能.为了缓解这种来自于大访问量的频繁读取DB的压力,我们可以把一些数据缓存起来,当请求过 ...
 - android drawable size
			
================
 - LINQ操作List<T>
			
LINQ操作List<T>主要包括: 1.筛选 List<string> stcdList = stcdArray.ToList<string>() .FindAl ...
 - js实现点击图片,然后图片放大
			
HTML <td width="350"> <img height="100" width="100" class=&qu ...