java inputstream理解_Java进阶核心之InputStream流深入讲解
Java核心包 java.io包介绍
IO: Input / Ouput 即输入输出
输出流:程序(内存) —>外界设备
输入流:外界设备—>程序(内存)
处理理数据类型分类
字符流:处理字符相关,如处理文本数据(如txt文件), Reader/Writer
字节流: 处理字节相关,如声音或者图片等二进制,InputStream/OutputStream
两者区别:
字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节
字节流可以处理几乎所有文件,字符流只能处理字符类型的数据
功能不同,但是具有共性内容,通过不断抽象形成4个抽象类,抽象类下面有很多子类是具体的实现
字符流 Reader/Writer
字节流 InputStream/OutputStream
IO流相关类体系概览
Java输入流Inputstream讲解
InputStream是输入字节流的父类,它是一个抽象类(一般用他的子类)
int read()
讲解:从输⼊入流中读取单个字节,返回0到255范围内的int字节值,字节数据可直接转换为int类
型, 如果已经到达流末尾⽽而没有可⽤用的字节,则返回- 1
int read(byte[] buf)
讲解:从输⼊入流中读取⼀一定数量量的字节,并将其存储在缓冲区数组buf中, 返回实际读取的字节
数,如果已经到达流末尾⽽而没有可⽤用的字节,则返回- 1
long skip(long n)
讲解:从输⼊入流中跳过并丢弃 n 个字节的数据。
int available()
讲解:返回这个流中有多少个字节数,可以把buf数组⻓长度定为这个
void close() throws IOException
讲解:关闭输⼊入流并释放与该流关联的系统资源
常见子类
FilelnputStream
抽象类InputStream用来具体实现类的创建对象,文件字节输入流,对文件数据以字节的形式进行读取操作
常用构造函数
//传⼊入⽂文件所在地址
public FileInputStream(String name) throws FileNotFoundException
//传⼊入⽂文件对象
public FileInputStream(File file) throws FileNotFoundException
例如:
package domee.chapter10_2;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException {
String dir = "C:\\Users\\阮相歌\\Desktop\\test";
String name = "a.txt";
File file = new File(dir,name);
InputStream inputStream = new FileInputStream(file);
testRead(inputStream);
testSkip(inputStream);
testReadByteArr(inputStream);
}
public static void testReadByteArr(InputStream inputStream)throws IOException{
//如果buf的长度为0,则不读取任何字节并返回0;每次读取的字节数最多等于buf的长度
//byte[] buf = new byte[1024];
byte[] buf = new byte[inputStream.available()];
int length;
//循环读取文件内容,输入流中将最多的buf.length
// 个字节数据读入一个buf数组中,返回类型是读取到的字节数
//如果这个缓冲区没有满的话,则返回真实的字节数
while ((length = inputStream.read(buf))!= -1){
//中文乱码问题,换成GBK,或者UTF-8
System.out.print(new String(buf,0,length));
System.out.print(new String(buf,0,length,"UTF-8"));
System.out.println(new String(buf,0,length));
}
}
public static void testRead(InputStream inputStream)throws IOException{
//对于汉字等 unicode中的字符不能正常读取,只能以乱码的形式显示
int read = inputStream.read();
System.out.println(read);
System.out.println((char)read);
}
public static void testSkip(InputStream inputStream)throws IOException{
long skipSize = inputStream.skip(2);
System.out.println(skipSize);
int read = inputStream.read();
System.out.println(read);
System.out.println((char)read);
}
}
编码小知识(节省空间)
操作的中文内容多则推荐GBK:
GBK中英文也是两个字节,用GBK节省了空间,UTF-8编码的中文使用了三个字节
o如果是英文内容多则推荐UFT-8:
因为UFT-8里面英文只占一个字节
UTF-8编码的中文使用了三个字节
总结
到此这篇关于Java进阶核心之InputStream流的文章就介绍到这了,更多相关Java InputStream流内容请搜索WEB开发者以前的文章或继续浏览下面的相关文章希望大家以后多多支持WEB开发者!
java inputstream理解_Java进阶核心之InputStream流深入讲解相关推荐
- Java进阶核心之InputStream流
Java进阶核心之InputStream流 Java核心包 java.io包介绍 IO: Input / Ouput 即输入输出 输出流:程序(内存) ->外界设备 输入流:外界设备->程 ...
- java协变 生产者理解_Java进阶知识点:协变与逆变
一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...
- java 开发优势_Java最核心的优势是什么?
关于Java的核心优势,可以从以下几点来进行了解一下 一.Java是目前使用最为广泛的网络编程语言之一 Java技术作为应用最为广泛的编程语言之一,深受全球开发者的喜爱.Java几乎涵盖了所有类型的网 ...
- java stream 理解_java Stream的理解
流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用"流"这种方 ...
- java 异常 理解_java异常理解(1)
JAVA异常处理机制 1引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我, ...
- java小工程_Java进阶:阶段性小工程
在前面的几篇文章中,老梁和大家聊了聊自己这半年来的程序生活,并且简单的介绍了一下Java的一些知识点.我们主要了解了Java的基本通用语法和三大特性,以及Java接口等知识点.但是老梁在之前关于知识点 ...
- java 字符串 常量_Java进阶——Java中的字符串常量池
字符串常量池 JVM为了减少字符串对象的重复创建,其内部维护了一个特殊的内存,这段内存被成为字符串常量池(方法区中).实际上还有整型常量池.浮点型常量池等等.字符串常量池存放的是对象的引用,而不是对象 ...
- java装饰模式理解_Java设计模式之装饰模式趣谈
JVM:"上次给我招的工人不错啊!" oo程序员:"---.." JVM:"现在来我开的博物馆生意越来越好了,原来"舞台剧"的方式 ...
- java映射理解_Java反射的理解
Java反射的理解 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的.于是我们直接对这个类进行实例化,之后使用这个 ...
最新文章
- python手机版ios-iOS 项目中如何使用 Python
- .netcore 分布式事务CAP2.6 快速入门
- 微服务和Java EE
- c语言中listempty函数,list_empty()和list_empty_careful()
- 作者:杜小勇(1963-),男,中国人民大学信息学院教授,博士生导师。
- Jack Dorsey二度卸任推特CEO,原CTO接棒,立即生效!
- golang延时,在golang中使用延迟
- jsp value设置为函数的返回值_python中的生成器函数是如何工作的?
- 6016.Linux shell脚本编程规范(第1版)
- Canny算子边缘检测——非极大值抑制Non-Maximum Suppression
- 计算机图形学八大行星程序,计算机图形学模拟太阳系源代码
- 01 - Python 调用outlook发送邮件
- Spotlight搜索技巧
- python中count方法
- 南大软院大神养成计划--CSS网页布局
- Mininet系列实验(一):Mininet使用源码安装
- Temporal Pyramid Network for Action Recognition(CVPR2020)
- freecommander 快捷键列表 zz
- 使用Python的Cufflinks库创建三维散点图
- UglifyJs打包相关问题