天道酬勤,学无止境

字节流与字符流的区别

要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。

在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。

  底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。

  字符向字节转换时,要注意编码的问题,因为字符串转成字节数组,

  其实是转成该字符的某种编码的字节形式,读取也是反之的道理。

 

讲解字节流与字符流关系的代码案例:

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.InputStreamReader;

import java.io.PrintWriter;

 

public class IOTest {

public static void main(String[] args) throws Exception {

String str = "中国人";

/*FileOutputStream fos  = new FileOutputStream("1.txt");


fos.write(str.getBytes("UTF-8"));

fos.close();*/


/*FileWriter fw = new FileWriter("1.txt");

fw.write(str);

fw.close();*/

PrintWriter pw = new PrintWriter("1.txt","utf-8");

pw.write(str);

pw.close();


/*FileReader fr = new FileReader("1.txt");

char[] buf = new char[1024];

int len = fr.read(buf);

String myStr = new String(buf,0,len);

System.out.println(myStr);*/

/*FileInputStream fr = new FileInputStream("1.txt");

byte[] buf = new byte[1024];

int len = fr.read(buf);

String myStr = new String(buf,0,len,"UTF-8");

System.out.println(myStr);*/

BufferedReader br = new BufferedReader(

new InputStreamReader(

new FileInputStream("1.txt"),"UTF-8"

)

);

String myStr = br.readLine();

br.close();

System.out.println(myStr);

}

 

}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 【Java基础-3】吃透Java IO:字节流、字符流、缓冲流
    Java IO流 前言1 初识Java IO1.1 IO流分类1.2 案例实操 2 IO流对象2.1 File类2.2 字节流2.3 字符流2.4 序列化 3 IO流方法3.1 字节流方法3.2 字符流方法 4 附加内容4.1 位、字节、字符4.2 IO流效率对比4.3 NIO 前言 有人曾问fastjson的作者(阿里技术专家高铁):“你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?” 高铁答道:“因为热爱本身,就是奖励啊!” 这个回答顿时触动了我。想想自己,又何尝不是如此。写作是个痛苦的过程,用心写作就更加煎熬,需字字斟酌,反复删改才有所成。然而,当一篇篇精良文章出自己手而呈现眼前时,那些痛苦煎熬就都那么值得。如果这些博文能有幸得大家阅读和认可,就更加是莫大的鼓舞了。技术人的快乐就是可以这么纯粹和简单。 点波关注不迷路,一键三连好运连连! IO流是Java中的一个重要构成部分,也是我们经常打交道的。这篇关于Java IO的博文干货满满,堪称全网前三(请轻喷!) 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握得很好,可以立即关闭文章。反之,你可以在后面得文章中寻找答案。 Java IO流有什么特点?Java IO流分为几种类型?字节流和字符流的关系与区别?字符流是否使用了缓冲?缓冲流的效率一定高吗?为什么
  • FileInputStream与FileReader(FileInputStream vs FileReader)
    问题 FileReader rd=new FileReader("new.mp4"); FileWriter wr=new FileWriter("output.mp4"); int ch; while((ch=rd.read())!=-1) wr.write(ch); wr.flush(); wr.close(); 当我使用FileReader和FileWriter读写mp4文件时, output.mp4文件无法很好地呈现。 但是当我使用FileInputStream和FileOutputStream它工作得很好。 因此,我可以得出结论FileReader和FileWriter仅用于读取和写入文本吗? 回答1 是的,您的结论是Reader和Writer正确子类适用于读取/写入文本内容。 InputStream / OutputStream用于二进制内容。 如果您看一下文档: Reader用于读取字符流的抽象类 InputStream抽象类是表示字节输入流的所有类的超类。 回答2 FileReader (以及其他扩展Reader的东西)的确适用于text 。 从阅读器的文档中: 读取字符流的抽象类。 (强调一下。)查看一下API,您将发现它与文本有关–整个地方都是char而不是byte 。 InputStream和OutputStream用于二进制数据,例如mp4文件。
  • 字节流和字符流(Byte Stream and Character stream)
    问题 请解释什么是字节流和字符流。 这些到底是什么意思? Microsoft Word文档是面向字节还是面向字符? 谢谢 回答1 流是顺序访问文件的一种方式。 字节流逐字节访问文件。 字节流适用于任何类型的文件,但不适用于文本文件。 例如,如果文件使用unicode编码,并且一个字符用两个字节表示,则字节流将分别处理这些字节,您需要自己进行转换。 字符流将逐字符读取文件。 必须为字符流提供文件的编码,以使其正常工作。 尽管Microsoft Word文档包含文本,但是无法使用字符流(它不是文本文件)进行访问。 您需要使用字节流来访问它。 回答2 ByteStreams : 从oracle文档页面中有关字节流的信息: 程序使用字节流执行8位字节的输入和输出。 所有字节流类都继承于InputStream和OutputStream 。 何时使用: 字节流仅应用于最原始的I / O 何时不使用: 您不应该使用字节流读取字符流 例如读取文本文件 字符流: 从oracle文档页面中有关字符流的信息: Java平台使用Unicode约定存储字符值。 字符流I / O会自动将此内部格式与本地字符集转换。 所有字符流类均来自Reader和Writer 。 字符流通常是字节流的“包装器”。 字符流使用字节流执行物理I / O,而字符流则处理字符和字节之间的转换。 有两个通用的字节到字符“桥”流:
  • Java-IO框架汇总
    目录 流的分类 字节流 字节输入流 FileInputStream ObjectInputStream 字节输出流 FileOutputStream ObjectOutputStream 字节缓冲流 BufferedInputStream BufferedOutputStream 字符流 字符输入流 FileReader BufferedReader 字符输出流 流的分类 按照流向分为 输入流:从外部设备输入到内存中 输出流:从内存输出到外部设备 按照单位分为 字节流:以字节为单位,可以读所有数据 字符流:以字符为单位,只能读文本数据 按照功能分为 节点流:具有实际传输数据的读写功能 过滤流:在节点流的基础上增强功能 字节流 字节输入流 InputStream: 这个抽象类是表示输入字节流的所有类的超类。 常用实现类:FileInputStream、ObjectInputStream FileInputStream 用于读取诸如图像数据的原始字节流 常用构造方法 FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。 FileInputStream(FileDescriptor fdObj) 创建 FileInputStream通过使用文件描述符 fdObj
  • Java ,如何用标准的输入输出流重定向到一个文件
    最近,在学习Java,并且学习到了Java的IO(输入与输入),什么是Java IO呢? IO流位于java.io包中,根据操作数据不同,分为字节流和字符流;根据数据输入方面的不同又可分为输入流和输出流,无论是何种流,最终都依赖于操作系统。一、字节流:1、字节流,主要用于图片、音频、视频的传输,以二进制的形式进行,分为字节输入流和字节输出流;字节流操作的是字节数组;字符流操作的是字符数组。2、字节输入与字节输出流的继承体系图 InputStream 常用方法方法声明功能描述int read()从输入流读取一个8位的字节,把它转换为0-255之间的整数,并返回这一整数int read(byte[] b)从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取的字节数int read(byte[] b,int off,len)从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节void close()关闭此输入流并释放与该流关联的所有系统资源 OutputStream 常用方法方法声明功能描述void write(int b)向输出流写入一个字节void write(byte[] b)把参数b指定的字节数组的所有字节写到输出流void write(byte[] b,int off,len
  • 字节流和字符流详解
    1.流的概念 在编程中是一种抽象的概念,就好比“水流”,从一段流向另一端在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。 2.流的分类 按照流向可以分为:输入流(如:键盘,麦克风),输出流(如:显示器,音箱) 按照传输单位可以分为:字节流和字符流 3.什么是字节流,什么是字符流 字节流: 它处理单元为1个字节(byte),操作字节和字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位); 字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到中文(文本)的,用字符流好点(1Unicode = 2字节 = 16位); 所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能
  • Java中的IO与NIO面试题
    1、Java 中 IO 流? Java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。 2、 Java IO与 NIO的区别 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO 主要用到的是块,所以NIO的效率要 比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。 3、常用io类有那些 4、字节流与字符流的区别 以字节为单位输入输出数据,字节流按照8位传输 以字符为单位输入输出数据,字符流按照16位传输 5、阻塞 IO 模型 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态
  • JAVA文件IO操作
    JAVA文件IO操作 学习札记 引子1、File类File类RandomAccessFile类 2、流类管道流ByteArrayInputStream和ByteArrayOutputStreamDataInputStream和DataOutputStream(数据字节输入流和数据字节输出流)SequenceInputStream文件合并流字节流与字符流的转化 3、字符编码4、对象序列化 发布于2019年09月06日 ⇲禁止转载于copy 笔记属于应用和基础原理层面,为浅谈;不涉及源代码解析。 引子 当我们要将Java程序中产生的数据永久性地保存起来的时候,应该想到的是将数据存到文件当中。将数据存入文件和将数据从文件中取出就涉及到了I/O的输入输出技术。Java提供了I/O操作可以将数据保存到多种类型的文件当中(当然每种特定格式的文件有其独特的构造方式和存取方式),本篇笔记将带你了解操作各种类型文件都具有的共同部分,了解了这些共同之处,就算遇到鲜有接触的文件格式也能灵活驾驭。 包括内容:File类、各种流类、字符的编码、对象序列化 1、File类 File类 是IO包中唯一代表磁盘文件本身的对象,进一步说就是File类起到了一个文件句柄的作用,所有对磁盘文件层面的操作都需要通过它,所有对磁盘文件的存取操作都需要先通过获取File类来完成
  • JAVA I/O流的分类
    Java中 对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将 这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。   二、分类   流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:   1、按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序。   2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。   3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的 一种流,FileInputStream是一个节点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能。   其实除了以上三种分类外,还有一些常常听到的一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点流和处理流的子分类。当然你也可以创建新的流类型,只要你需要。   三、流分类的关系   不管流的分类是多么的丰富和复杂
  • 还在迷茫于java的文件操作吗?来看看Java文件操作的套路 - Java基础
    JavaSE - 对于文件操作的介绍 文章目录 一、IO原理二、"流" 简介流的分类流的结构 三、代码实现 字符流操作文本文件的实现:字符流简介FileReader读取文件打印到控制台① 利用read()空参方法进行读取② 利用read(char[] c)方法进行读取<1> 错误的写法:<2> 正确的写法: FileWriter内存中写出到文件① 覆盖写出(覆盖文件中原有数据)② 追加写出(在原有数据后面追加) 文件的复制(前两个结合起来) 字节流操作非文本文件的实现:字节流简介FileInputStream && FileOutputStream实现图片(非文本)的复制 通用方法实现指定路径下文件的复制,并获取耗时 🔺缓冲流来进行数据处理(效率高)BufferedInputStream && BufferedOutputStream 实现复制操作为什么缓冲流的效率高?BufferedReader && BufferedWriter 实现文本文档复制①方式一:使用write(char[] , 0 , len)写入:②使用write(String )进行写入: 转换流(分辨也是看后缀)- 相对难作用InputStreamReader实现字节的输入流到字符的输入流的转换InputStreamReader 和 OutputStreamWriter综合(将UTF-8的转为gbk的存储)
  • 史上最骚最全最详细的IO流教程,没有之一!
    目录 1、告白IO流的四点明确2、File类 1.1 File概述1.2 构造方法1.3 常用方法 1.3.1 获取功能的方法1.3.2 绝对路径和相对路径1.3.3判断功能的方法1.3.4 创建删除功能的方法1.4 目录的遍历1.5 递归遍历文件夹下所有文件以及子文件3、初探IO流 1.1 什么是IO1.2 IO的分类1.3 关于IO的分流向说明字节流OutputStream与InputStream的故事2.1 文件的世界里一切皆为字节2.2 字节输出流(OutputStream)2.3 字节输入流(InputStream)字符流Reader和Writer的故事字符流1、 字符输入流(Reader) FileReader类构造方法FileReader读取字符数据2、字符输出流(Writer) FileWriter类 构造方法FileWriter写出数据关闭close和刷新flushFileWriter的续写和换行FileReader和FileWriter类完成文本文件复制IO异常的处理1、缓冲流【掌握】 1.1 简要概述1.2 字节缓冲流 构造方法感受缓冲流的高效1.3 字符缓冲流 构造方法字符缓冲流特有方法1.4 字符缓冲流练习 代码实现2、转换流【掌握】 2.1 字符编码与解码字符集2.2 编码问题导致乱码2.3 InputStreamReader类-----
  • java基础 - IO流 字节流与字符流 每天积极向上
    字节流(2字节 = 8bit) 输入:InputStream 输出:OutputStream 字符流(4字节 = 16bit) 输入:Reader 输出:Writer 处理文本用字符流,处理媒体文件用字节流 字节流处理文本:字节流一次读2个字节,而一个中文占用3个字节(对copy文件没有影响),对Console显示会出现乱码问题 对象流与序列化 什么是序列化:序列化就是一种用来处理对象流的机制,对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输 被static或transient修饰的成员变量不能序列化 实现 Serializable接口 与 编写private static final long serialVersionUID = -12123123L; class Students implements Serializable{ private static final long serialVersionUID=1213123121212L; String name; int age; public Students(String name, int age) { this.name = name; this.age = age; } } 序列化与反序列化 /** * 可以通过网络传播或保存在本地磁盘上 */ 序列化
  • IO
    IO 文件操作一定要慎重 1.File类:文件和目录路径名的抽象表示。(一个file类对象可以表示一个文件)。 用户界面和操作系统使用依赖于系统的路径名字符串来命名文件和目录。 此类提供了一个抽象的,与系统无关的分层路径名视图。 抽象路径名有两个组成部分: 可选系统有关的前缀字符串,如磁盘驱动器符, "/“对于UNIX根目录下,或者”\\"的Microsoft Windows UNC路径,并 一个零个或多个字符串名称的序列。 抽象路径名中的第一个名称可以是目录名称,对于Microsoft Windows UNC路径名,可以是主机名。 抽象路径名中的每个后续名称表示目录; 姓氏可以表示目录或文件。 空抽象路径名没有前缀和空名称序列。 常用的构造方法 File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。 File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。 常用方法: boolean delete() 删除此抽象路径名表示的文件或目录。 boolean mkdir() 创建此抽象路径名指定的目录。 boolean mkdirs()
  • Python3中的StringIO(StringIO in Python3)
    问题 我正在使用Python 3.2.1,但无法导入StringIO模块。 我使用io.StringIO并且可以工作,但是不能将其与numpy的genfromtxt一起使用,如下所示: x="1 3\n 4.5 8" numpy.genfromtxt(io.StringIO(x)) 我收到以下错误: TypeError: Can't convert 'bytes' object to str implicitly 当我写import StringIO时说 ImportError: No module named 'StringIO' 回答1 当我写导入StringIO时,它说没有这样的模块。 从Python 3.0的新功能中: StringIO和cStringIO模块不见了。 而是导入io模块,并将io.StringIO或io.BytesIO分别用于文本和数据。 。 修复一些Python 2代码以使其在Python 3(caveat emptor)中工作的可能有用的方法: try: from StringIO import StringIO ## for Python 2 except ImportError: from io import StringIO ## for Python 3 注意:该示例可能与问题的主要内容相切
  • 普歌-码灵团队——简述io
    io io概述什么是ioio的分类 字节流字节输出流字节输出流的续写和换行 字节输入流字节输入流读取字节数据 字符流字符输入流Reader类和FileReader类字符输入流读取字符数据 字符输出流写出单个字符到文件flush方法和close方法字符输出流写数据的其他方法字符输出流的续写和换行 io概述 什么是io 数据的传输,可以看作是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存的输出流。 Java中的i/o操作主要是指由java.io包下的内容,进行输入、输出操作。 输入也叫做读取数据,输出也叫做写出数据 i:input 输入(数据) o:output 输出(写入) 流:数据(字符,字节)1个字符=2个字节 1个字节=8个二进制位 输入:把硬盘中的数据,读取到内存中使用 输出:把内存中的数据,写入到硬盘中保存 io的分类 根据数据的流向分为:输入流和输出流 输入流:把数据从其他设备上读取到内存中的流输出流:把数据从内存中写出到其他设备上的流 根据数据的类型分为:字节流和字符流 字节流:以字节为单位,读写数据的流字符流:以字符为单位,读写数据的流 字节流 字节流可以传输任意文件数据,在操作流时,无论使用什么样的流对象,底层传输的始终为二进制数据 字节输出流 /*字节输出流的使用步骤(重点) 1
  • java字节流
    字节流: 有两个根类:输入流:InputStream 输出流:OutputStream 这两个根类流都是抽象类 字节输出流: OutputStream:方法 write(int by):写一个字节数据 write(byte[] by) :将by写到目的地 write(byte[] by,int index,int len):将by一部分数据写到目的地 close():关闭流 子类:FileOutputStream,文件输出流对象 构造方法: FileOutputStream(File/String filename) FileOutputStream(File/String, boolean append) append:true表示不会覆盖文件,而是追加数据写到原有内容末尾 字节输入流: 字节输入流的根类:InputStream抽象类 方法: int read():读取一个字节数据,如果读取到末尾返回-1. int read(byte[] by):读取数据存储到by中,返回读取到的字节数,末尾返回-1 int read(byte[] by, int index,int len):读取数据存储到by的一部分中,返回读取到的字节数,末尾返回-1 close():关闭流 子类对象: FileInputStream 构造方法: FileInputStream(File/String
  • Java基础知识面试题
    主题链接Java基础知识面试题Java集合容器面试题Java并发编程面试题Java底层知识面试题Java常用框架面试题计算机网络面试题数据库面试题RabbitMQ面试题Redis面试题Elasticsearch面试题Zookeeper面试题系统设计面试题 文章目录 面向对象什么是面向对象?什么是面向过程?面向对象的三大基本特征是什么?面向对象的五大基本原则是什么?什么是JVM、JDK、JRE为什么Java是跨平台的?值传递、引用传递的区别访问修饰符public、private、protected,以及不写(默认)时的区别?抽象类与抽象接口重写与重载的区别 基本数据类型Java的基本数据类型有哪些各个基本数据类型的取值范围 关键字String为什么字符串是不可变的?为什么要设计成对象内容不可变?String.valueOf和Integer.toString的区别swtich对string的支持intern== 和 equals 的区别是什么 自动拆装箱什么是包装类型?什么是基本类型什么是自动拆装箱Integer的缓存机制是什么 异常异常类型自定义异常Error 和 Exceptionfinally和return的执行顺序 泛型泛型与继承类型擦除是什么泛型中 K T V R ? object等的含义限定通配符和非限定通配符List<?>和List之间的区别
  • Java常用工具_IO流_IO流概述
    IO流概述 什么是IO流 I/O,即输入(Input)输出(Output),IO流指的是数据像连绵的流体一样进行传输。 IO流能干什么 在本地磁盘或网络上传输(读/写)数据 如何学习IO流 根据API文档使用步骤查找并使用IO流体系中的类 查找输入/输出流类查看构造方法创建输入/输出流对象处理异常读/写操作关闭输入/输出流 IO流的分类 按数据流向分 输入流 输出流 按操作方式分 字节流:InputStream OutputStream字符流:Reader Writer IO流体系 字符流:按字符读写数据的IO流 ReaderFileReaderBufferedFileReaderWriterFileWriterBufferedFileReader 字节流:按字节读写数据的IO流 InputStreamFileInputStreamBufferedInputStreamOutputStreamFileOutputStreamBufferedOutputStream 总结 IO流简介: 概述: I(Input, 输入)/O(Output, 输出)流, 是Java中用来传输数据的方式. 划分: 按照流向分: 输入流: 读数据. 输出流: 写数据. 按照操作分: 字节流: 以字节为单位来操作数据. InputStream: 字节输入流的顶层抽象类. FileInputStream
  • Java基础——IO流2
    转换流 编码表 GBK编码表:国际码,定义全都是英文字符和中文字符。一个英文字符占用一个字节,一个中文字符占用两个字节UTF-8编码表:万国码,定义是全球所有语言中常用的字符。一个英文占用一个字节,一个中文占用三个字节 转换输出流和转换输入流 OutputStreamWriter:转换输出流,在输出数据是,可以指定编码格式 构造方法: OutputStreamWriter(OutputStream in,Charset cs):使用基础的输出流对象,指定以cs编码格式来写出信息InputStreamReader:转换输入流,在输入数据时,可以指定编码格式 构造方法: InputStreamReader(InputStream in,Charset cs):使用基础的输入流对象,指定以cs编码格式读取信息总结: 在读取数据时,应该使用源文件的编码格式读取信息 在写出数据时,应该使用目标文件的编码格式写出信息 public static void main(String[] args) throws IOException { //a.txt 和b.txt 都为utf-8 InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"utf-8"); OutputStreamWriter osw
  • java.lang、java.io、java.net、java.util解释整理
    为应对近期单位认证:整理点Java知识 首先整理Java常见的类库: 1.Java.lang 这个 算是我们开发经常用到的基础类了,包含的类有object超类,8种类型的包装类,字符串类,线程类,异常类等 如下所示:图来自:链接 异常处理机制: Throwable Throwable Throwable是 Java 语言中所有错误或异常的超类。 Throwable包含两个子类: Error 和 Exception。它们通常用于指示发生了异常情况。 Throwable包含了其线程创建时线程执行堆栈的快照,它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。 Exception Exception及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。 RuntimeException RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 编译器不会检查RuntimeException异常。例如,除数为零时,抛出ArithmeticException异常。RuntimeException是ArithmeticException的超类。当代码发生除数为零的情况时,倘若既"没有通过throws声明抛出ArithmeticException异常",也"没有通过try…catch…处理该异常"