Java io和Linux io有什么函数对应关系系

当前位置: >
> Java中的新IO―NIO
Java中的新IO―NIO
时间:作者:华清远见
一、新IO概述:
新IO和传统IO都是用于进行输入/输出,相比于传统IO面向流的处理方式,新IO采用内存映射文件来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了,所以这种访问方式既方便又快得多。
新IO中的两个核心对象:Channel(通道)和Buffer(缓冲)。Channel用于新IO的数据传输,相对于传统IO中的InputStream和OutputStream,Channel提供了一个map()方法用来将一段数据映射成为一块内存。也就是在新IO中,改变了传统IO面向流的处理而转向面向块的处理方式。
Buffer是一个容器,它的本质是一个数组。发送到Channel的所有对象以及从Channel取出的所有数据先存放到Buffer中。
除了上面两个核心对象外,新IO还提供了Charset类用于将Unicode字符串映射成字节序列以及逆映射操作。以及Selector类用于支持非阻塞式输入输出。
二、Java中与新IO相关的包:
1.java.nio包:主要包含各种与Buffer相关的类
2.java.nio.channels包:主要包含与Channel和Selector相关的类
3.java.nio.charset包:主要包含与字符集相关的类
4.java.nio.channels.spi包:主要包含与Channel相关的服务提供者编程接口。
5.java.nio.charset.spi包:包含与字符集相关的服务提供者编程接口
三、Channel介绍以及使用
Channel可以直接将指定文件的部分或全部直接映射成Buffer,并且程序不能直接访问Channel中的数据,Channel只能与Buffer交互。
Channel接口提供了DatagramChannel、FIleChannel、SocketChannel、ServerSocketChannel等实现类。由此可见Channel是按功能进行了划分。
Channel所有的对象都不是通过构造器创建的,而是通过传统节点InputStream和OutputStream的getChannel()方法获得的。但是不同的节点获得的Channel对象也不同,是各自节点类型对应的Channel对象。例如:FileInputStream通过getChannel获得的Channel对象是FileChannel对象。
虽然Channel对象既可以读取也可以写入,但是InputStream获得的Channel只能读,OutputStream获得Channel对象只能写。
Channel中常用的方法:map()、read()、write(),read()和write()方法有一系列的重载形式,这些方法用于从Buffer中读或写数据。
四、Buffer的介绍及使用
Buffer可以保存多个类型相同的数据。Buffer是一个抽象类,最常用的子类是ByteBuffer,它可以在底层字节数组上进行get/set操作。另外还有其他的子类:CharBuffer、ShortBuffer、IntBuffer等。
Buffer中有三个重要的概念:容量(capacity)、界限(limit)、和位置(position)。
容量:缓冲区的容量,即最多可以存储多少数据,其中缓冲区的容量不可以为负数,创建后不容许改变。
界限:第一个不应该被读出或者写入的缓冲区位置索引,也就是以此为界限后面的区域无法读写数据。
位置:指明下一个可以被读出或者写入的缓冲区位置索引。
put()方法和get()用于放入、取出数据。
flip()方法,调用该方法后界限就回到原来的position所在位置。
clear()方法,将position设置为0。将limit设为与capacity相等。
五、字符集和Charset
所有的文件底层都是二进制文件,即全部都是字节码。把明文的字符转换成二进制序列称为编码,把二进制编码转换成明文字符串称为解码。JDK1.4之后提供了Charset类来处理字节序列和字符序列之间的转换关系,该类中包含用于解码和编码的方法。其中该类提供的availableCharset()方法来获取当前JDK所支持的所有字符集。
每个字符集都有一个字符串别名:
GBK:简体中文字符集
BIG5:繁体中文字符集
ISO-8859-1:ISO拉丁字母表
UTF-8:8位UCS转换格式
UTF-16BE:16位UCS转换格式,大端字节顺序
UTF-16LE:16位UCS转换格式,小端字节顺序
UTF-16:16位UCS转换格式,字节顺序由可选的字节顺序标记来标识
当知道了字符集的别名之后,程序就可以调用Charset的forName()方法来创建Charset对象,然后通过创建的对象的newDecoder()、newEncoder()方法分别返回CharsetDecoder、CharsetEncoder对象代表Charset的解码器和编码器。调用CharsetDecoder的Decode()方法将字节序列转换成字符序列,调用CharsetEncoder的encode()方法可以将字符序列转化成字节序列。
学院最新动态java中 IO 常用IO操作类继承结构分析
今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐java中 IO 常用IO操作类继承结构分析,希望大家看完后也有个好心情,快快行动吧!
IO 常用IO操作类继承结构IO字符流Reader(源)BufferedReaderLineNumberReaderInputStreamReaderFileReader(字节流通向字符流的桥梁)&&&StringReader&&&&Writer(目的)BufferedWriter&&&OutputStreamWriterFileWriter(字符流通向字节流的桥梁)&&&StringWriter空&&&PrintWriter空&&&字节流InputStream(源)FileInputStream空&SequenceInputStream合并流&&&ByteArrayInputStream在构造的时候,需要接收数据源,而且数据源为字节数组;&&&OutputStream(目的)FileOutputStream空&&ByteArrayOutputStream内部定义了一个可变长度的字节数组,它就是数据目的地;&&&
来源:/n/3799.html
点击查看更多与《》相关的文章>>
浅析Java中Data类的应用,浅析Java中Data类的应用
Linux操作系统下常见文件类型分析,Linux操作系统下常见文件类型分析
为什么Java中继承多数是有害的,为什么Java中继承多数是有害的
asp.net创建文件夹的IO类的问题,asp.net创建文件夹的IO类的问题
Linux2.6.11内核文件IO系统调用详解,Linux&2.6.11内核文件IO系统调用详解
只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的Objective-C中使用NSString类操作字符串的方法小结,手机电脑控们准备好了吗?一起看过来吧!
热门搜索:
台式电脑怎么无线上网
手把手教你怎样清理鼠标右键菜单栏
怎样清洗鼠标垫 鼠标垫的清洗方法
PS相片处理 制作复古旧照片效果
电脑是很多人都在使用的电子产品之一。与不少人都不怎么喜欢在自己电脑上装杀毒软件,担心这些安全软件存在上传用户信息、监控用户等问题,或者说感觉这些安全软件拖慢了电脑速度。想要“裸奔”,那么有哪些是必须要注意的呢?
萝卜应该是市场上最常见的一种蔬菜,一年四季都比较适宜吃,对于小朋友来说,了解与认识各种事物是最重要的,那么,当小朋友不爱学习时,你可以画出手绘画给小朋友看,下面一起来看看手绘萝卜明信片教程吧。
小米手机为发烧而生的广告词当年是引起了众多关注,使用的人越来越多。小米6也在近期新上市了。小米手机的高性能带来的耗电问题让大家都觉得头疼。今天来为大家介绍几种小米手机的省电方法,让你的手机拥有更长的待机时间!
跨栏架是国际运动项目的一种运动器材,为L字形的栏架,简笔画难度不高,小朋友在学习跨栏架简笔画的同时还能了解跨栏运动的知识。接下来就让我们一起来看看怎么画跨栏架儿童简笔画吧!
怎么利用Photoshop给电商模特照片精修磨皮?很多朋友在工作中经常会遇到要求精修模特的情况,特别是做化妆品行业的电商设计师,所以总结了一下我的模特修图方法和技巧与大家分享,喜欢的朋友让我们一起来学习吧。
磨皮是我们ps照片最基本的技能,Photoshop人物磨皮是我们必须掌握的,如今不少国人对Photoshop修图的三大酷炫神技双曲线、中性灰与高低频几近痴迷,抓耳挠腮想学会它,下面一起看看教程吧。
掌握一点Photoshop教程对你是非常有用的,这篇教程是给大家分享PS简单快速创建眼睛彩虹美瞳效果方法,教程最终创建出来的效果非常漂亮,而且难度并不是很大,很值得大家学习,一起来学习吧。
2017年最受欢迎的生活服务APP!!生活服务类App的出现为日常生活带来极大便利,我们可以通过手机客户端预约各种家政服务,足不出户就能够享受实惠、便捷的生活服务,那么接下来我为大家推荐一些生活中必备生活app。
由于现在抢红包大热起来,很多app都开始支持发红包抢红包了,因此也出现了微信抢红包神器,可以自动抢微信红包,肯定比认为手动操作快,有消息就会自动打开,然后打开红包。今天就给大家分享2017微信自动抢红包神器大全。
2017手机赚钱软件排行榜!!很多朋友都在苦恼每天的钱不够话,空闲时间不知道怎么打发,总想寻找一种简单的赚钱方式,我们的手机app就有很多,下面具体给大家介绍手机赚钱软件有哪些,总有一款你中意的。
经常玩微信的朋友都知道,微信小程序已经全面上线了,对于小程序的出现是否会引发App变革众说纷纭,但不可否认的是小程序能够带给用户及产商一定的便利,那么今天为大家汇总目前上线的一些实用小程序。
男女交往一直都是人们比较关注的一个问题,都说相爱容易,相处不易,交往过的朋友应该都能深刻的体会到,女生常常抱怨着让男生理解自己,但男生也希望多体谅一下他们。尤其不要老是问一些无法回答的问题来考验他们。
很多朋友都信风水一说,对于自己家里房屋客厅的装修也是有一定要求的,因为客厅的风水关系着整个家居的运势,更关系着主人的财运与健康,因而客厅里的风水禁忌是需要我们谨慎注意的,那么风水学中客厅风水禁忌有哪些呢?
春天已经来临了,夏天也不远了,新的一才刚刚开始,时尚爱美的美眉们最关注的就是春夏服装设计的流行趋势了,早早的把握住时尚趋势走在流行的最尖端,今天就给大家整理分享2017春夏女装设计流行趋势 ,你绝对不能错过的亮点。Java关于IO流的介绍_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Java关于IO流的介绍
来源:Linux社区&
作者:crshuai
JDK提供的流继承了四大类:InputStream(字节输入流)、OutputStream(字节输出流)、Reader(字符输入流)、Writer(字符输出流)。
字符流和字节流的主要区别:& & & 1.字节流读取的时候,读到一个字节就返回一个字节;& 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。& & & 2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。   只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。
详解如下:
一、字节流讲解
  1.用流对文件进行处理
package com.chen.
import java.io.*;/**&* &* @author 陈家小帅&*&*/public class TestIO {& & public static void main(String[] args) {& & & & File file = new File("E:/java.txt");& & & & if (!file.exists()) {& & & & //先判断该目录文件是否存在& & & & & & try {& & & & & & & & //file.mkdirs();& 创建该目录下指定的文件夹& & & & & & & & file.createNewFile(); // 当文件不存在时,创建此文件夹& & & & & & & & & & & & & & } catch (Exception e) {& & & & & & & & e.printStackTrace();& & & & & & }& & & & }& & & & //file.delete();& & & & //删除指定的文件& & & & System.out.println("文件名:"+file.getName());& & }}
2. InputStream 和 OutputStream 是两个 abstact 类,对于字节为导向的 stream 都扩展这两个基类;
inputStream中的关键方法:
read():方法是读取一个byte字节,但是返回的是int。
read(byte[]):一次性读取内容到缓冲字节数组
read(byte[],int,int):从数据流中的哪个位置offset开始读长度为len的内容到缓冲字节数组
OutputStream中的关键方法
write(int):写入一个字节到stream中
write(byte[])写入一个byte数组到stream中
write(byte[],int,int):把byte数组中从开始处写入长度为len的数据
flush():这个方法是用来刷新stream中的数据,让缓冲区中的数据强制的输出
3.FileInputStream和FileOutputStream
  FileInputStream : 从文件系统中的某个文件中获得输入字节.
  FileOutputStream : 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流.
下面是一个例子:
package com.chen.
import java.io.*;/**&* &* @author 陈家小帅&*&*/public class Test4 {& & public static void main(String[] args) throws Exception {& & & & String path1 = "E:/WorkSpace/Mouth/bin/Dest.txt";& & & & String path2 = "E:/WorkSpace/Mouth/bin/D.txt";& & & & ReadByFIS(path1, path2);& & }/**& & * 使用FileInputStream 将一个文件的内容写入到另一个文件中,并在控制台输出& & * & & * @param path1& & * @param path2& & * @throws Exception& & */& & public static void ReadByFIS(String path1, String path2) throws Exception {& & & & InputStream in = new FileInputStream(path1);& & & & //创建文件输入流& & & & OutputStream out = new FileOutputStream(path2);& & & & //创建文件输出流& & & & byte[] buffer = new byte[1024];& & & & & & & & & & & & //定义字节数组& & & & int len = 0;& & & & while ((len = in.read(buffer)) & 0) {& & & & & & & & //将最多buffer.lenth个字节的数据读入byte数组中& & & & & & String s = new String(buffer, 0, len);& & & & & & //将读入的字节转换成String类型& & & & & & System.out.println(s);& & & & & & & & & & & & & & //输出读取到的信息& & & & & & out.write(buffer, 0, len);& & & & & & & & & & & & //将读取到的信息写入到文件中& & & & }& & & & out.close();& & & & & & & & & & //关闭输入输出流& & & & in.close();& & }}
输出结果如下:
如果想让某个字符串写入到文件中,如下所示:
package com.chen.Timport java.io.*;
public class Two {& & // 编写一个Java程序将111,112,113,114,115 这5个数以写入到Dest.txt文件中& & public static void main(String[] args) throws Exception {& & & & String str = "111,112,113,114,115";& &         //定义字符串     FileOutputStream fo = new FileOutputStream("E:/WorkSpace/Mouth/bin/Dest.txt");& & & & & //创建文件输出流& & & & int len = 0 ;& & & & byte[] buffer = str.getBytes();& & & & &       //将字符串转换成byte字节& & & & fo.write(buffer);& & & & & & & & & & & & & &     //将字节数组中的数据写出 & & & & fo.close();  }}
更多详情见请继续阅读下一页的精彩内容:
相关资讯 & & &
& (12/09/:28)
& (04/16/:50)
& (12/21/:11)
& (12/09/:38)
& (04/19/:24)本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 tomcat和java对应关系 的文章

 

随机推荐