字节流

文本在内存中的编码(2)——乱码探源(5)

流过昼夜 提交于 2019-11-28 14:39:23
在前面我们探讨了String是什么的问题,现在来看String从哪来的问题。 String从哪里来? 所谓从哪里来也可以看作是String的构造问题,因此我们会从String的构造函数说起。 String的构造函数 在前面我们知道String的内部就是char[],因此它可以根据一组char[]来构建,String中有这样的构造函数: public String(char value[]) {} 那么char[]又从何而来呢?char的底层是byte,String从根本上讲还是字节序列,而一个文本文件从根本上讲它也是字节序列,那是不是直接把一个文本文件按字节读取上来就成了一个String呢? 答案是否定的。因为我们知道String不但是byte[],而且它是一个有特定编码的byte[],具体为UTF-16。 而一个文本文件的字节序列有它自己特定的编码,当然它也可能是UTF-16,但更可能是如UTF-8或者是GBK之类的,所以通常要涉及编码间的一个转换过程。我们来看下通过字节序列来构造String的几种方式: public String(byte bytes[]) {} public String(byte bytes[], String charsetName) throws UnsupportedEncodingException {} public String(byte

字节流与字符流的区别

廉价感情. 提交于 2019-11-28 08:30:46
1、要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。 2、在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。 3、底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。 4、字符向字节转换时,要注意编码的问题,因为字符串转成字节数组,其实是转成该字符的某种编码的字节形式,读取也是反之的道理。 讲解字节流与字符流关系的代码案例: import java.io.BufferedReader; import java.io.FileInputStream; import java.io

字节流与字符流的区别

血红的双手。 提交于 2019-11-28 08:30:36
要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。 在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。 字符流是字节流的包装 , 字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便 。 字符向字节转换时,要注意编码的问题,因为字符串转成字节数组, 其实是转成该字符的某种编码的字节形式,读取也是反之的道理。 讲解字节流与字符流关系的代码案例: import java.io.BufferedReader; import java.io.FileInputStream; import java.io

字节流与字符流的区别详解

时间秒杀一切 提交于 2019-11-28 08:30:02
字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。 字节流与字符流 在 java.io 包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用 OutputStream 完成,输入使的是 InputStream ,在字符流中输出主要是使用 Writer 类完成,输入流主要使用 Reader 类完成。(这四个都是抽象类) java中提供了专用于输入输出功能的包Java.io,其中包括: InputStream,OutputStream,Reader,Writer InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象, Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串. 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片

字节流与字符流区别

萝らか妹 提交于 2019-11-28 08:29:40
文章转自http://blog.csdn.net/zxman660/article/details/7875799 字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。 字节流与字符流 在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类) java中提供了专用于输入输出功能的包Java.io,其中包括: InputStream,OutputStream,Reader,Writer InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象, Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串. 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组

缓冲流

醉酒当歌 提交于 2019-11-28 08:23:03
缓冲流 缓冲流:    读取数据大量的文件时 , 读取的速度慢, java 提供了一套缓冲流,提高 IO 流的效率。分为字节缓冲流和字符缓冲流。 ★字节缓冲流:      缓冲输出流:BufferedOutputStream  缓冲输入流:BufferesInputStream BufferedOutputStream: /* * 字节输出流的缓冲流 作用 提高效率 * 继承OutputStream * 构造方法 new BufferedOutputStream(OutputStream out); * * */ public class BufferedOutputStreamDemo { public static void main(String[] args) throws Exception { // 1创建字节输出流 绑定文件 //FileOutputStream fos =new FileOutputStream("c:\\buffer"); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:\\buffer")); bos.write(65);//自动查码表 utf-8 0 1 //输出字符串 byte[] b= "hello world".getBytes();

文件和流

╄→гoц情女王★ 提交于 2019-11-28 06:23:35
IO流:文件和流 回顾 Collection接口 add remove contains clear iterator |_____List (特点:有序的,可以重复) |___ArrayList (存储结构:数组) 查找遍历快,添加删除慢 |___LinkedList (链表)添加删除快,查找遍历慢 |___Vector 数组 (线程安全的) |___Stack 数组(栈)先进后出 | |_____Set(特点:无序的,不能重复) |_____HashSet 哈希表(jdk1.7数组加链表jdk1.8数组链表红黑树) 1 执行hashCode()来计算存储的位置 ,2 执行equals比较结果 |____LinkedHashSet 哈希表 可以保证顺序 |____TreeSet 自平衡红黑二叉树 1 元素要实现Comparable接口 ,2 定制比较器 Comparator Map(特点:存储键值对,键不能重复,一个键对应一个值,值可以重复,无序) |______ HashMap 哈希表 1 执行hashCode()来计算存储的位置 ,2 执行equals比较结果 |______ Hashtable 哈希表 不能存储null键和null值,线程安全的 jdk1.0----》Properties子类 |_______LinkedHashMap 哈希表 可以保证顺序 |______

缓冲流等

假装没事ソ 提交于 2019-11-28 06:23:20
IO流:缓冲流等 回顾 1 File类 表示硬盘中一个文件或文件夹(目录) 文件: //1.1创建对象 File file=new File("d:\\123.txt"); //1.2判断文件是否存在 if(!file.exists()){ file.createNewFile(); } //1.3删除 file.delete(); file.deleteOnExit();//退出jvm,删除文件 //1.4可执行、可读、可写 file.canExecute(); file.canRead(); file.canWrite(); //1.5获取 file.getAbsoulatePath(); file.getPath(); file.getName(); file.getParent(); file.lastModified();//修改时间 //1.6判断 file.isFile(); file.isHidden(); file.renameTo();//重命名 文件夹 : //2.1创建文件夹 File dir=new File("d:\\aaa\\bbb"); //2.2判断是否存在 if(!dir.exists()){ dir.mkdir();//一级目录 dir.mkdirs();//多级目录 } //2.3删除 dir.delete(); dir

java的Io流机制的学习

穿精又带淫゛_ 提交于 2019-11-27 18:48:10
IO流机制 File类的使用 File类的构造方法 File(URI uri) File(String pathname) File(File parent, String child) File(String parent, String child) File类的常用方法 boolean exists():判断文件是否存在 boolean createNewFile() :创建一个新文件,只能创建一个文件,不能创建目录(文件夹),创建时先判断文件 是否存在 ,不存在则创建并返回true, 存在则返回false. File getAbsoluteFile() File 类型的绝对路径File文件形式,相当于 File file =new File(绝对名称), String getAbsolutePath() String类型的绝对路径的字符串形式 String getName() : 获取的是路径的最后一级的名称 String getPath() //获取的是相对路径的名称:打File对象事调用的就是getPath()方法 String Parent() //返回当前文件的上一级目录,若没有上一级目录返回null bolean isDirectory() //判断是否是文件 bolean isFile() //判断是否是文件夹 bolean delete()/

字节流、字符流

元气小坏坏 提交于 2019-11-27 18:15:07
【字节流、字符流】 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 能够理解读取数据read(byte[])方法的原理 能够使用字节流完成文件的复制 能够使用FileWirter写数据到文件 能够说出FileWriter中关闭和刷新方法的区别 能够使用FileWriter写数据的5个方法 能够使用FileWriter写数据实现换行和追加写 能够使用FileReader读数据 能够使用FileReader读数据一次一个字符数组 能够使用Properties的load方法加载文件中配置信息 第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。 我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output ,即流向内存是输入流,流出内存的输出流。 Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。 输入 也叫做 读取 数据, 输出 也叫做作 写出 数据。 1.2