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 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 为什么字符流需要 ...
随机推荐
- 利用CSS 修改input=radio的默认样式(改成选择框)
html部分: <input id="item2" type="radio" name="item"> <label fo ...
- [转] CDH6 安装文章链接收集
CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解 http://blog.51cto.com/wzlinux/2321433?source=dra Cloudera ...
- JS实现值复制
在JS中对象一般都是传地址,后续修改也会影响原始数据.例如这样. var a={ b:"b" }; var c=a; c.b="c"; console.log( ...
- vue构造器以及实例属性
一.构造器 1.vue.js就是一个构造器,通过构造器Vue来实例化一个对象:例如:var vm = new Vue({}); 2.实例化Vue时,需要传入一个参数(选项对象): 3.参数:选项对象可 ...
- 使用wireshark出现Couldn't run /usr/bin/dumpcap in child process: Permission denied解决办法
sudo apt-get install libcap2-bin wireshark sudo chgrp myusername /usr/bin/dumpcap # myusername是你使用wi ...
- Mongo db 与mysql 语法比较
mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...
- C C++ OC指针常量和常量指针区别
看Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法这本书的时候看到有一个说多用类型常量,少用#define预处理指令 ,在这里面有说到指针常量,之前 ...
- Vue组件库
滴滴cube-ui https://didi.github.io/cube-ui/#/zh-CN/docs/quick-start 有赞开源Vant(适合做商城) https://tech.youza ...
- [转]emailjs-smtp-client
本文转自:https://github.com/emailjs/emailjs-smtp-client/blob/master/README.md SMTP Client SMTP Client al ...
- 微信小程序自学过程中遇到的问题 转
view标签下hover必须为true时,设置hover-class才有效,hover-start-time和hover-stay-time的形式如下: < view class=" ...