天道酬勤,学无止境

Java IO——字节流和字符流详解&区别对比

Java IO——字节流和字符流详解&区别对比


概述

大多数应用程序都需要实现与设备之间的数据传输,在Java中,将这种通过不同输入输出设备(例如:输入设备、内存、显示器、网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于Java.io包中,称之为IO(输入输出)流。 IO流,即InputOutput的缩写。

Java IO库有两个支系:

  1. 面向字节流的InputStream和OutputStream
  2. 面向字符的Reader和Writer

java流在处理上分为字符流和字节流。实际上字节流的InputStream和OutputStream是一切的基础。实际总线中流动的只有字节流。需要对字节流做特殊解码才能得到字符流。Java中负责从字节流向字符流解码的桥梁是:InputStreamReader和InputStreamWriter。

字节流&字符流

大多数情况下,字节是数据最小的基本单位,1 byte = 8 bit,而 1 char = 2 byte = 16 bit。

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。

输入流是相对程序而言的,外部传入数据给程序需要借助输入流,而程序把数据传输到外部需要借助输出流。

字节流

Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了最基本的输入字节流和输出字节流。InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先,它们都是抽象类。

字节流在默认情况下是不支持缓存的,字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,这意味着每调用一次read方法都会请求操作系统来读取一个字节,这往往会伴随着一次磁盘IO,因此效率会比较低。要使用内存缓冲区以提高读取的效率,我们应该使用BufferedInputStream。

需注意,使用BufferedOutputStream输出数据时如果没有关闭流,数据也是不会输出到文件当中的,即并不是所有字节流都不用到缓冲区,输入缓冲字节流BufferedInputStream和输出缓冲字节流BufferedOutputStream还是要用到缓冲区的。

字符流

Java中的字符流处理的最基本的单元是Unicode码元(大小2字节),它通常用来处理文本数据,例如字符、字符数组或字符串。Java中的String类型默认就把字符以Unicode规则编码而后存储在内存中。存储在磁盘上的数据通常有着各种各样的编码方式,不同的编码方式最终输出的字节内容是不同的,所以,字节流的读取和写入都要设置相应的编码方式。

由于字符流在输出前实际上是要完成Unicode码元序列到相应编码方式的字节序列的转换,所以它会使用内存缓冲区来存放转换后得到的字节序列,等待都转换完毕再一同写入磁盘文件中。

所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。

字节流和字符流的区别

字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
字节流默认不使用缓冲区;字符流使用缓冲区。
字节流在操作的时候本身是不会用到缓冲区的,是与文件本身直接操作的,所以字节流在操作文件时,即使不关闭资源,文件也能输出;字符流在操作的时候是使用到缓冲区的。如果字符流不调用close或flush方法,则不会输出任何内容。
字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流和字符流的转换

字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化,这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。在从字节流转化为字符流时,实际上就是byte[]转化为String时,而在字符流转化为字节流时,实际上是String转化为byte[]时。

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流与字符流主要的区别是他们的的处理方式。

受限制的 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>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 字节流和字符流详解
    1.流的概念 在编程中是一种抽象的概念,就好比“水流”,从一段流向另一端在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。 2.流的分类 按照流向可以分为:输入流(如:键盘,麦克风),输出流(如:显示器,音箱) 按照传输单位可以分为:字节流和字符流 3.什么是字节流,什么是字符流 字节流: 它处理单元为1个字节(byte),操作字节和字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位); 字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到中文(文本)的,用字符流好点(1Unicode = 2字节 = 16位); 所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能
  • 【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流分为几种类型?字节流和字符流的关系与区别?字符流是否使用了缓冲?缓冲流的效率一定高吗?为什么
  • JAVA字节流和字符流的区别
    之前在复习IO的时候,为了方便记忆,提到了以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。 除了在使用上的不一样,那究竟两者有什么区别呢。直接给出结论:字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。 测试方法:使用OutputStream和Writer分别对文本文件做写入,但是并不关闭、不刷新(flush)输出流,执行后看是否能成功写入。 OutputStream package com.leolee.eurekaclient.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class Tests { public static void main(String[] args) throws IOException { final String text = "Hello"; File file = new File("C:" + File.separator + "Users" + File.separator + "LeoLee" + File.separator + "Desktop
  • java IO流之字节流
    1 IO流相关概念 1.1 什么是IO流? IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 1.2 IO流分类 按流向来分 输入流InputStream Reader(读取数据) 输出流OutStream Writer(写数据) 按操作类型分 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 字符流 : 字符流只能操作纯字符数据 1.3 Java中常用IO流的类 字节流的抽象父类: InputStream 输入流 OutputStream 输出流 字符流的抽象父类: Reader 字符读取流 Writer 字符写入流 2 InputStream InputStream是抽象类,表示字节输入流,用于读数据。 直接已知子类: AudioInputStream ByteArrayInputStream FileInputStream(学习文件输入流) FilterInputStream ObjectInputStream PipedInputStream SequenceInputStream StringBufferInputStream InputStream之FileInputStream 概述: FileInputStream 从文件系统中的某个文件中获得输入字节
  • 字节流与字符流的区别
    要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。 字符向字节转换时,要注意编码的问题,因为字符串转成字节数组, 其实是转成该字符的某种编码的字节形式,读取也是反之的道理。 讲解字节流与字符流关系的代码案例:import java.io.BufferedReader;import java.io.FileInputStream;import java.io
  • 技术问答-12 java字节流和字符流
    1.什么是流Java中,把所有的输入和输出都当做流来处理。“流”是一种抽象概念,他代表任何有能力产出数据的数据源对象或者有能力接收数据的接收端对象。“流”屏蔽了实际的输入/输出设备中处理数据的细节。一个程序可以打开一个数据源上的流,然后按顺序读取这个流中的数据到程序中,这样的流称为输入流。一个程序打开一个目的地的流,然后按顺序的把程序中的数据写入到这个目的地中,这样的流称为输出流。2.字节流Java中的字节流处理的最基本单位是字节,他通常用来处理二进制数据。Java中最基本的两个字节流是InputStream OutputStream ,他们分别代表了一组基本的输入字节流和输出字节流。InputStream 和 OutputStream 是抽象类,实际使用中我们会用到他们的一系列子类例子:InputStream public abstract int read() throws IOException; 这个方法是从字节流中读取一个字节若到了末尾返回-1 ,他会一直阻塞直到返回一个读取到的字节或者是-1,字节流默认情况下不支持缓存,也就是每一次read调用都会请求操作系统来读取一个字节,这会伴随一次磁盘IO操作read(byte b[]) 这个方法只是在内部循环调用了read方法 关于磁盘IO操作并没有减轻 如果我们想减少磁盘IO操作,也就是使用内存缓冲
  • Java字节流与字符流及文件操作
    目录 Java.io知识点梳理File类字节流OutputStream字节流InputStream字符流Writer字符流Reader字节流与字符流的转换(了解)字节流与字符流的区别?两者如何使用? Java.io知识点梳理 如果要进行所有的文件以及文件内容的开发操作,应该使用java.io包完成,而在java.io包里面一共有五个核心类和一个核心接口: 五个核心类:File、InputStream、OutputStream、Reader、Writer一个核心接口:Serializable File类 在整个java.io包里面,File类是唯一一个与文件本身操作有关的类 ,但是不涉及到文件的具体内容,所谓的文件本身,指的是文件的创建和删除等。 几个重点掌握方法: 1.构造方法:public File(String pathname) 设置文件路径 2.普通方法:public boolean delete(); 删除文件 3.普通方法:public boolean exists()判断文件是否存在 4.普通方法:public File getParentFile();public String getParentFile();得找到父路径 5.普通方法:public Boolean mkdirs() 创建多级子目录 6普通方法:.public long length()
  • Java I / O流; 有什么区别?(Java I/O streams; what are the differences?)
    问题 java.io有许多不同的I / O流(FileInputStream,FileOutputStream,FileReader,FileWriter,BufferedStreams等),我在确定它们之间的差异时感到困惑。 在哪些示例中,一种流类型优先于另一种流类型,它们之间的真正区别是什么? 回答1 这是一个大话题! 我建议您先阅读I / O流: I / O流代表输入源或输出目的地。 流可以表示许多不同种类的源和目标,包括磁盘文件,设备,其他程序和内存阵列。 流支持许多不同类型的数据,包括简单字节,原始数据类型,本地化字符和对象。 有些流只是传递数据。 其他人则以有用的方式操纵和转换数据。 回答2 流:一次一个字节。 适用于二进制数据。 读者/作家:一次一个字符。 适用于文本数据。 任何“缓冲的”:一次很多字节/字符。 几乎所有时间都很好。 回答3 在学习Java时,我制定了有关java.io的心理方案: 溪流 面向字节的流(8位) 适用于二进制数据,例如Java .class文件适用于“面向机器”的数据 读者/作家 面向char(utf-16)的流(16位) 适用于Java源代码之类的文本适用于“以人为本”的数据 缓冲的 除非另有证明,否则总是有用的 回答4 将每个名字分成单词:每个大写字母是一个不同的单词。 文件输入流是使用流从文件获取输入的。
  • IO流--字符流写数据
    IO流是用来处理设备之间的数据传输的,诸如:文件的复制,上传下载文件Java中的流可以从不同的角度进行分类:- 按照流的方向不同:分为输入流和输出流。- 按照处理数据单位的不同:分为字节流和字符流。- 按照功能不同:分为节点流和处理流要区分字符流和字节流,我们可以从类名来区分类名中包含Reader:字符流 输入流类名中包含Writer:字符流 输出流类名中包含Input:字节流 输入流类名中包含Output:字节流 输出流包含Stream:字节流今天着重来看下字符流.Write顾名思义就是写的意思,FileWriter(String fileName) 指的是传递一个文件的名称成员方法:void write(String str) 往文件中写入一个字符串void flush() 刷新该流的缓冲,把内存缓冲区中的数据刷新到新的文件中去void close() 关闭此流,但是要先刷新它输出流写数据的一般步骤(也是最基本的步骤)1.创建输出流对象2.调用输出流对象写数据的方法3.刷新缓存,写入文件4.释放资源.举例:import java.io.FileWriter;import java.io.IOException;public class DemoFileWriter {public static void main(String[] args) throws
  • Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
    第一讲 IO概述 概述 1、IO流:即InputOutput的缩写。 2、特点: 1)IO流用来处理设备间的数据传输。 2)Java对数据的操作是通过流的方式。 3)Java用于操作流的对象都在IO包中。 4)流按操作数据分为两种:字节流和字符流。 5)流按流向分为:输入流和输出流。 注意:流只能操作数据,而不能操作文件。 3、IO流的常用基类: 1)字节流的抽象基流:InputStream和OutputStream 2)字符流的抽象基流:Reader和Writer 注:此四个类派生出来的子类名称都是以父类名作为子类名的后缀,以前缀为其功能;如InputStream子类FileInputStream;Reader子类FileReader 第二讲 字符流 一、简述 1、字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。 2、字符流只用于处理文字数据,而字节流可以处理媒体数据。 3、既然IO流是用于操作数据的,那么数据的最常见体现形式是文件。查看API,找到一个专门用于操作文件的Writer子类对象:FileWriter。 后缀是父类名。前缀名是流对象的功能。该流对象一被初始化,就必须有被操作的文件存在。 二、字符流的读写 1、写入字符流步骤 a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖
  • 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文件。
  • 莫逸风CSDN文章目录
    『Ⅱ』-----随笔 莫逸风CSDN文章目录 The Programmer’s Oath程序员的誓言—… 今天突发奇想写了一个小工具,CSDN文章目录生成器 vue去掉一些烦人的校验规则 输入npm install 报错node-sass@4.13… idea操作maven时控制台中文显示乱码/maven项目启… jquery validate 如何校验多个相同name IDEA debug启动的时候需要等半个小时甚至更长时间 再也不用担心了,微软官方系统(win10为例)U盘安装教程 mysql ORDER BY 中文出现错误问题 MyBatis like报错 数据库存储图片相对路径使用问题,配置tomcat的serve… 解决maven中静态资源只能放到properties中的问题 Mybatis出现错误org.apache.ibatis.e… 修改IDEA默认模板 tomcat启动与运行时出现中文乱码问题 IDEA配置Tomcat IDEA不自动提示仓库中有的包maven 软件设计文档 简单的字幕添加方法 hive表导出到mysql报错 Scrapy启动spider出错 C语言判断两个值相等 二维数组 三目运算符 C语言定义常量 C语言格式化输出语句 # 算法笔记 Best Cow Line 区间调度问题 硬币问题 迷宫最短路径 部分和问题 区间k大数训练 蓝桥杯基础练习
  • IO 101:TextWriter,FileStream和StreamWriter之间的主要区别是什么?(IO 101: Which are the main differences between TextWriter, FileStream and StreamWriter?)
    问题 让我首先道歉,如果这个问题听起来对您中经验丰富的程序员而言可能有点业余,那就是我在工作中一直对此有很多争论,所以我真的很想弄清楚这一点,这基本上就是我要依靠的原因在stackoverflow社区上一劳永逸地解决这个问题:) 因此,一方面,根据MSDN,我们有: TextWriter类别表示可以编写一系列连续字符的作家。 此类是抽象的。 FileStream类在文件周围公开Stream,同时支持同步和异步读取和写入操作。 StreamWriter类实现一个TextWriter,用于以特定编码将字符写入流中。 另一方面,很明显它们都属于System.IO,但是考虑到MSDN示例混合了其中的一些,我仍未达到人们所期望的a-ha时刻。 任何评论将不胜感激,在此先多谢! 回答1 流处理字节,作家处理字符。 字节!=个字符。 一个字符可能需要一个以上的字节来表示。 从字符到字节的映射称为编码。 FileStream引用被写入文件的字节,类似于MemoryStream引用被写入内存缓冲区的字节。 为了将字符写入流,您需要将它们转换为字节字符串。 这就是StreamWriter发挥作用的地方。 它采用字符序列和编码,然后将其转换为字节序列。 TextWriter是所有Writer必须遵守的接口(很好的抽象基类)。 它具有所有基于字符的操作。 字节的等效项是Stream抽象基类。
  • 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中的IO整理
    【案例1】创建一个新文件import java.io.*; class hello{ public static void main(String[] args) { File f=new File("D:\\hello.txt"); try{ f.createNewFile(); }catch (Exception e) { e.printStackTrace(); } } } 【运行结果】:程序运行之后,在d盘下会有一个名字为hello.txt的文件。【案例2】File类的两个常量import java.io.*; class hello{ public static void main(String[] args) { System.out.println(File.separator); System.out.println(File.pathSeparator); } }【运行结果】:\;此处多说几句:有些同学可能认为,我直接在windows下使用\进行分割不行吗?当然是可以的。但是在linux下就不是\了。所以,要想使得我们的代码跨平台,更加健壮,所以,大家都采用这两个常量吧,其实也多写不了几行。呵呵、现在我们使用File类中的常量改写上面的代码:import java.io.*; class hello{ public static void main(String[
  • 【3】Java基础21-30
    目录 知识点21:java 中 IO 流分为几种? 知识点22:BIO、NIO、AIO 有什么区别? 知识点23:Files的常用方法都有哪些? 知识点24:Collection 和 Collections 有什么区别? 知识点25:HashMap 和 Hashtable 有什么区别? 知识点26:如何决定使用 HashMap 还是 TreeMap? 知识点27:说一下 HashMap 的实现原理? 知识点28:说一下 HashSet 的实现原理? 知识点29:ArrayList 和 LinkedList 的区别是什么? 知识点30:如何实现数组和 List 之间的转换? 知识点21:java 中 IO 流分为几种? 按功能来分:输入流(input)、输出流(output)。 按类型来分:字节流和字符流。 字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。 知识点22:BIO、NIO、AIO 有什么区别? BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。 NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。 AIO:Asynchronous IO 是 NIO 的升级,也叫
  • 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
  • 字节流和字符流(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面试题(吐血整理)--基础知识
    1.JVM、JRE和JDK的关系 JDK包括JRE,有编译工具(javac.exe),打包工具(jar.exe),GUI运行工具(javaw.exe),JRE没有 2.Java语言有哪些特点 1.跨平台 2.面向对象(封装,继承,多态) 3.什么是字节码?采用字节码的最大好处是什么 字节码:java源代码->编译器->字节码(即扩展为.class的文件),只面向虚拟机 好处:1.跨平台 2.一定程度上解决了传统解释型语言执行效率低的问题 运行过程:java源代码---->编译器---->字节码---->jvm解释器----->二进制机器码---->程序运行 4.Java有哪些数据类型 基本数据类型 数值型 整数类型(byte,short,int,long)浮点类型(float,double)字符型(char)布尔型(boolean)引用数据类型 类(class)接口(interface)数组([]) 5.switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上 在 Java 5 以前,只支持byte、short、int、char,从 Java5 开始,可以是 enum,从 Java 7 开始,可以是String,long暂不支持 6.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少 Math
  • 13.1Java之网络编程
    简介 网络编程:是指编写运行在多个设备上的程序,这些设备通过网络连接。 网络编程三要素: 协议:TCP、UDP。这两个新协议最重要的区别是:TCP是可靠的,有连接的。UDP是不可靠的,无连接的。IP地址:分为IPV4和IPV6两种。本地IP为127.0.0.1或localhost端口号:用来标识设备中的进程(0~65535,1024之前的被系统分配因此不能使用) java.net包中包含了解决通信问题的类和接口,从而不用关注通信细节。 TCP编程 分为客户端和服务端: 客户端:Java中提供了java.net.Socket类用来表示客户端,它向服务器端发出请求,服务器响应则建立连接。服务端:Java中提供了java.net.ServerSocket表示服务端,相当于开启一个服务,等待客户端的连接。 三次握手和四次挥手。 三次握手:客户端想服务器发出连接请求。服务器回应客户端确认连接。客户端回应服务器确认连接。四次挥手:客户端请求切断连接。服务器确认收到切断连接请求。服务器发送已经关闭连接信号。客户端应答确认切断。 字节流:客户端和服务端之间通信的数据为字节流。 TCP是全双工通信,因此客户端和服务端都能接收和发送数据,因此都需要创建IO流对象。 服务端通信全过程: package com.HelloWorld.MySocket; import java.io.IOException