管道流的输入输出流可以直接连接,通过结合线程来使用。
( 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编码以机器无关的方式将字符串写入基础输出流。
小例子:
IO(八)
API: void connect(PipedOutputStream src) 使此管道输入流连接到管道输出流 src 。连接方法,输入输出流都有,只要一个调用即可。PipedOutputStream: 构造函数: PipedOutputStream() 创建一个尚未连接到管道输入流的管道输出流。 PipedOutputStream(PipedInputStream snk) 创建连接到指定...
两个单片机可否通过IO口(八个)来通信?详细讲解一下过程吧
可以,但是你要解决同步机制,不然会导致通信错误或是通信效率不高,如果单片直接io相连的话要注意加上拉电阻,不然实际使用的时候可能会出问题哦,本来5V的高电平有可能变成3V,特别是两个单片是不同牌子的。
四川拌菜的调料及做法
详情请查看视频回答
台式电脑蓝牙配置器哪个版本
根据red的电脑的设置应用来看。台式电脑蓝牙配置器在Word io八版本。
单片机IO口详解
在详细分析单片机引脚端口结构时,我们可以以入门级的at89c51为例。P0口为双向八位三态IO,当设置为输出时,若不接入上拉电阻,置1时输出电平不确定,置0时输出高电平。P0口内部结构中,上面的三极管D0在执行MOVX指令时才会控制导通与截止,而下面的三极管D1在通常操作中控制电平输出。P1口为准双向IO,...
解答右图中在直角三角形abo中BO等于六厘米io等于八厘米ab等于十厘米求...
阴影面积是三角形面积减去1\/4圆的面积。三角形面积=(6*8)\/2=24,斜边上的高为(6*8)\/10=4.8,所以扇形的面积是(3.14*4.8*4.8)\/4=18,阴影的面积就是24-18=6
java的io读文件中,什么叫高低八位,什么叫高24位,求指点
一个字节(Byte)是8位(bit),其中的“8位”指的是8位2进制数。一个int类型的变量能存放4Byte,也就是能存放32bit二进制数,而一个32位二进制数中权值最大的24位就是高24位,举个十进制的例子:12345678,在这个八位数中1234就是高4位,5678就是低4位。如果有一个16位的二进制数:...
C++(八):iostream读写操作
IO操作可能会引发错误,产生错误时IO的状态会发生改变,所以IO库有些函数和标志可以帮助我们访问和操纵流的条件状态。查询流的状态: IO库定义了一个与机器无关的iostate类型,提供了表达流状态的完整功能。其中badbit表示系统级错误,如不可恢复的读写错误,一旦被置位流就无法再使用了。在发生可恢复...
stm32 里面 如果不同的io想组成一个新的8位的管脚口 怎么写?
应该是这样。首先直接给GPIO_USER赋值。然后分批把GPIO_user的值与后,再或上PA.
有没有一种单片机的IO扩展芯片,三输入八输出的?
题主说的这个芯片应该是38译码器,真值表如图所示。A0,A1,A2三个输入端,控制Y0到Y7的8个输出端。最常见的38译码器芯片型号是74HC138。望采纳。。。