IO(八)

作者&投稿:貊娜 (若有异议请与网页底部的电邮联系)
~

管道流的输入输出流可以直接连接,通过结合线程来使用。
Properties是IO与集合的结合,而管道流是IO与线程的结合

PipedInputStream:
构造函数:
PipedInputStream() 创建一个 PipedInputStream ,所以它还不是 connected 。 PipedInputStream(int pipeSize) 创建一个 PipedInputStream ,使其尚未 connected ,并使用指定的管道大小作为管道的缓冲区。
PipedInputStream(PipedOutputStream src) 创建一个 PipedInputStream ,使其连接到管道输出流 src 。
PipedInputStream(PipedOutputStream src, int pipeSize) 创建一个 PipedInputStream ,使其连接到管道输出流 src ,并为管道缓冲区使用指定的管道大小。

API:
void connect(PipedOutputStream src) 使此管道输入流连接到管道输出流 src 。连接方法,输入输出流都有,只要一个调用即可。

PipedOutputStream:
构造函数:
PipedOutputStream() 创建一个尚未连接到管道输入流的管道输出流。 PipedOutputStream(PipedInputStream snk) 创建连接到指定管道输入流的管道输出流。

RandomAccessFile:随机访问文件,自身具备读写的方法。内部封装了一个byte数组,通过指针对数组的元素进行操作。
通过skipBytes(int x),seek(int x)来达到随机访问。
通过getFilePointer获取指针的位置。
(能完成读写的原理是,其内部 封装了字节输入流和输出流

构造函数:
rw如果文件不存在,会创建文件,如果存在,不会覆盖。
r如果文件不存在,不会创建文件
RandomAccessFile(File file, String mode) 创建一个随机访问文件流从File参数指定的文件中读取,并可选地写入文件。
RandomAccessFile(String name, String mode) 创建随机访问文件流,以从中指定名称的文件读取,并可选择写入文件。

mode:
1 r:以只读方式打开指定文件。如果试图对该RandomAccessFile指定的文件执行写入方法则会抛出IOException
2 rw:以读取、写入方式打开指定文件。如果该文件不存在,则尝试创建文件
3 rws(了解):以读取、写入方式打开指定文件。相对于rw模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备,默认情形下(rw模式下),是使用buffer的,只有cache满的或者使用RandomAccessFile.close()关闭流的时候儿才真正的写到文件
4 rwd(了解):与rws类似,只是仅对文件的内容同步更新到磁盘,而不修改文件的元数据

API:
void write(int b) 将指定的字节写入此文件。
void writeInt(int v) 将 int写入文件为四个字节,高字节 int 。
void write(byte[] b) 从指定的字节数组写入 b.length个字节到该文件,从当前文件指针开始。
小例子演示:

发现a.txt有7个字节,内容是:张三a
其中raf.write("张三".getBytes());调用的是write(byte[] b) ,getBytes根据java本身的unicode编码转换为系统默认的utf-8编码后,为3个字节,所以张三两个字占了6个字节,而raf.write(97);调用的是write(int b),虽然int类型有4个字节,但是该方法只写入最低的8位,所以当int类型的值超过了8位时,进行写入操作就会丢失数据。此时就要使用writeInt方法。

比如,使用write方法得到的文件如下:

而此时使用writeInt再写一遍:

两次写操作,对于字符的编码都是一样的,采用Unicode码转换为utf-8的三位字节,而区别就是int类型写入了一个字节和四个字节。

=========================================
int readInt() 从该文件读取一个带符号的32位整数。
使用了writeInt之后,使用readInt来读取,非常方便。

这两个方法是这个类的精髓。
int skipBytes(int n) 尝试跳过 n字节的输入丢弃跳过的字节
void seek(long pos) 设置文件指针偏移,从该文件的开头测量,发生下一次读取或写入。
区别:
skipBytes只能往下跳,而seek可以随意调整文件指针的位置,更加灵活

小例子:
现有文本文件如下:

要求不读取李四和b,直接读取王五和后面的int。

小例子2:
不覆盖现有数据,在现有数据之后进行续写。

RandomAccessFile应用:多线程共同写入数据而不会冲突。

用于操作基本数据类型的流对象。

DataInputStream
构造函数:
DataInputStream(InputStream in) 创建使用指定的底层InputStream的DataInputStream。

API:
int readInt() 见 readInt方法 DataInput的一般合同。

String readUTF() 见 readUTF法 DataInput的一般合同。String readUTF() 见 readUTF法 DataInput的一般合同。

DataOutputStream
构造函数:
DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。

API:
void writeInt(int v) 将底层输出流写入 int作为四字节,高位字节。
有各种操作基本数据类型的方法。

void writeUTF(String str) 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流。

小例子:




二进制简写是B,十六进制的简写是H,那八进制和十进制的简写分别是什么呢...
二进制简写是B,十六进制的简写是H,那八进制和十进制的简写分别是O和D。B,Binary(二进制);H,Hex(十六进制);O,Octal(八进制);D,Decimal(十进制)。

二进制、十进制、八进制、十六进制 各代表的英文字母是什么
二进制是Binary,简写为B。八进制是Octal,简写为O。十进制为Decimal,简写为D。十六进制为Hexadecimal,简写为H。二进制数的特点:它由两个基本字符0,1组成,二进制数运算规律是逢二进一。为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。1) 二进制数中只有两个...

卡西欧计算器二进制、十进制、十六进制之间怎么转换?
2.或者在在数值后输入特定的命令,指定该数值的进制,d代表十进制,h代表十六进制,b代表二进制,o代表八进制;3.十进制转二进制:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止;4.二进制转十进制:把二进制数按权展开、相加即...

八倒的读音八倒的读音是什么
八倒的读音是:bādǎo。八倒的拼音是:bādǎo。注音是:ㄅㄚㄉㄠˇ。结构是:八(独体结构)倒(左右结构)。八倒的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】佛教语。凡夫二乘对涅_境界的八种偏执之见。或执常、乐、我、净四倒,或执非常、非乐、...

vb中val a2000的值为0为什么?
Val 函数返回包含于字符串内的数字,在它不能识别为数字的第一个字符上,停止读入字符串.例如美圆号与逗号,都不能被识别.第一位无法识别就返回0.但是函数可以识别进位制符号 &O(八进制)和 &H(十六进制)。空白、制表符和换行符都从参数中被去掉。下面的返回值为 1615198:Val(" 1615 198th...

八进制为什么用&O……表示?
十六进制,H为hex的缩写 hex. (hexadecimal)n. 十六进制的, 用 16 作为基础的数字系统 (跟 10 进制相反)同样,O是Octal的缩写 octal [oc·tal || 'ɑktl \/'ɒktl]adj. 八进制的, 以八为基础, 以八为基础的 (计算机, 电子学用语)另外还有平常默认不写的d,为decimal的缩写,十...

二进制如何转八进制?
二进制、八进制、十进制和十六进制 二进制是Binary,简写为B,二进制只有0和1两个值,计算方法是逢二进一。比如01B+01B,结果就是10B,因为逢二进一,低位的1相加后得2就向高位进1。八进制是Octal,简写为O,八进制是指有0~7这8个值的表示法,计算方法是逢8进1。比如17O+23O=42O,因为逢8...

10110101101011B等于多少h?
10110101101011B= (2D6B) H= (26553) O= (5867) D D表示十进制(可去掉字母D),B代表二进制,H代表16进制,O代表八进制。备注:在书写二进制、八进制或十六进制数时,后面的字母不能省略。方法:“八进制数可以用三位的二进制数来表示,十六进制数可用四位二进制数表示,整数部分最左边补0,...

计算机中(78)o是什么意思
o代表八进制。不过(78)o不是一个合法的八进制表达式。八进制中数位上是不可能出现8的。好好学习天天向上

以d开头的o结尾英语单词八个字母的
duodecimo 十二开本 ■a book of this size 十二开本的书

武宣县15260783001: avr mega16 与 avr mega8有什么不同 -
泊玛甲苯: 首先名字就不同 从名字可以看出FLASH不同,16是16K,MEGA8是8K 其次内部资源有所差别:RAM 8比16小一倍,只有512字节,定时器 8比16少一个8位定时器 IO 8比16少了整10个IO 价格不同 8比16便宜,但是不到一倍

武宣县15260783001: io月8日是什么星座. -
泊玛甲苯: 阳历是10月8日,所以是天秤座09/23-10/22若即若离的情人 我给你一表,你自己对照一下吧. 星座是按出生时的阳历(公历、新历)年月日日期划分的,以后每年是不变的. 星座 出生日期 类型 白羊座03/21-04/19热情开朗的情人 金牛座04/20-05...

武宣县15260783001: 电脑总是显示io错误window8 -
泊玛甲苯: 系统有问题了.直接换个验证过的系统盘重装系统就行了,这样就可以全程自动、顺利解决 win8系统显示io错误 的问题了.用u盘或者硬盘这些都是可以的,且安装速度非常快.安装方法如下:1、U盘安装:用ultraiso软件,打开下载好的系统...

武宣县15260783001: 两个单片机可否通过IO口(八个)来通信?详细讲解一下过程吧 -
泊玛甲苯: 可以,但是你要解决同步机制,不然会导致通信错误或是通信效率不高,如果单片直接io相连的话要注意加上拉电阻,不然实际使用的时候可能会出问题哦,本来5V的高电平有可能变成3V,特别是两个单片是不同牌子的.

武宣县15260783001: 请问1970年IO月8日阴厉是初几? -
泊玛甲苯: 阴历是1970年的九月初九,重阳节

武宣县15260783001: 1975年农历io月8日初生是什么星座 -
泊玛甲苯: 星座是依据本人出生时的阳历(新历、国历、公历、西历)日期划分和推算 公历 1975年11月10日 农历 十月初八 星期一 ‍ 星座是天蝎座 (10月24日-11月22日) 天蝎座的人,外表低调,实则企图心旺盛,充满神秘感,不会轻易地与人互动....

武宣县15260783001: ios是什么?ios9和8又是什么 -
泊玛甲苯: iOS原名叫做iPhone OS(iPhone操作系统),后来因为引进了iPad,所以统一改名为iOS.它是苹果公司推出的一款移动操作系统,适用于iPhone、iPad、iPod等苹果设备.iOS8是苹果在2014年发布的操作系统,iOS9则是今年的.8和9都是版本号.目前的iOS9还不太稳定,建议等苹果放出一些更新后再进行升级.

武宣县15260783001: 2020年IO月8日结婚冲虎(戊寅)煞南是什么意思? -
泊玛甲苯: 冲虎煞南冲,即相克;虎,即属相;煞,即煞神;南,即方位.煞南:这天出行、办事等,不能在自己家的南面方向,因为南面有煞神.冲虎:这天要和属虎的人冲突、相克等,所以要尽量避讳、回避.

武宣县15260783001: 怎么给一个8个IO口赋值 -
泊玛甲苯: 首先要弄清楚io口的赋值!! 使用并行输数据只能八位.所有,oxfffe要取出高八位和低八位!! 因为不存在取单独某位的问题,所有可以使用简单的移位语句 p1=(oxfffe>8); //右移8位,得p2=oxff 你这个程序的错误在于,p1口使用并行方法输送数据只能一次传输8位,而oxfffe位十六位,溢出错误!!

武宣县15260783001: 怎么升级ios11 beta8 -
泊玛甲苯: iOS11 Beta8更新内容苹果iOS11新增了Apple Pay个人间转账、Siri声音更自然和智能、控制中心设计大改、地图和导航更新、App Store迎来全新变革.iOS11中,苹果增加了对AR增强现实的支持,开发者可以推出更有创意的游戏.iOS11 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网