导航:首页 > 编程语言 > javaio流

javaio流

发布时间:2022-01-23 19:27:49

A. java io流详解

public void write(int ch) 这个方法你在哪个类里看到的,Write类里没有这个方法!public int read(char[] b) 这个参数是把字符数组传进去,返回int型是表示读出了多少个字节

B. java中什么是IO流

理解Java的IO流,首答先要把视角放在内存上,而不是放在文件上。
InputStream是用来写入的没错,但不是写入文件中,而是写入内存中。所以InputStream的作用是从文件中读取数据然后写入内存中或者说写入到正在运行的程序中。
而OutputStream同理,是从内存/程序中将数据推送出去,把数据保存到文件中。
以Java程序作为主视角,你就能懂了。Input读取是为了读给程序用,Output写出是程序把数据输出到硬盘上了。

C. JAVA IO流问题

问题有点模糊,我觉得你问的是这样的:
File f=new File(String directoryPath,String filename);//directoryPath是文件的路径,filename是文件名。
你这个题应该是:File f=new File("X.dat的路径","X.dat");

D. java中Io流问题

importjava.io.*;
publicclassUpTest{
publicstaticvoidmain(String[]args){
Filetxt=newFile("K:\IO测试\大小写转换\Test.txt");//目标源!
BufferedReaderbr=null;//读!
BufferedWriterbw=null;//写!
StringBuilderstb=newStringBuilder();//缓存!
try{
br=newBufferedReader(newFileReader(txt));
try{
for(Stringstr=br.readLine();str!=null;str=br.readLine()){
char[]chs=str.toCharArray();//临时数组!
for(inti=0;i<chs.length;i++){//遍历!
if(Character.isUpperCase(chs[i])){//大小写转换!
chs[i]=Character.toLowerCase(chs[i]);
stb.append(chs[i]);
}else{
chs[i]=Character.toUpperCase(chs[i]);
stb.append(chs[i]);
}
}
stb.append(System.getProperty("line.separator"));//跨平台换行!
}
bw=newBufferedWriter(newFileWriter("K:\IO测试\大小写转换\Test1.txt"));//目标目的地!
bw.write(stb.toString());//写!
bw.flush();//刷新流!
}catch(IOExceptione){
e.printStackTrace();
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}finally{//关流!
if(br!=null){
try{
br.close();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(bw!=null){
try{
bw.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
}
}

E. 关于JAVA IO流

流是没有规范的,集合的作用可以认为用于对流的规范,其实IO中的类很多都是可以完成你要的写操作的,问题看你自己喜欢使用哪个类,不管什么语言流和buffer总是挂钩的,流需要buffer的支持才能体现出流的特性和优势

F. java中io流问题。。

如果你用了缓冲流 你写完后要加个 flush() 和 close(),不管是读还是写操作完之后都要记得关闭数据流,写的话要多加个 flush() ,清空缓存

G. JAVA中IO流如何理解

IO包括输入和输出流,输入流指的是将数据以字符或字节形式从外部媒介比如文件、数据库等读取到内存中所以也分为字符输入流和字节输入流。
输出流指的是将内存中的数据写入外部媒介,也分为了字符输出流和字节输出流。

H. java io流的典型使用方式有几种

Java中IO流分成两大类,

一种是输入流,所有的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源,我们可以通过输入流的read方法读取字节数据;

另一种是输出流,所有的输出流都直接或间接继承自OutputStream抽象类,输出流接收数据,可以通过write方法写入字节数据。


Java的IO流类中,大部分的输入流和输出流都是成对存在的,即如果存在XXXInputStream,那么就存在XXXOutputStream,反之亦然。SequenceInputStream和StringBufferInputStream是特例,没有对应的SequenceOutputStream类和StringBufferOutputStream类,许多IO操作都可能会抛出IOException异常,比如read、write、close操作。

以下是Java的IO流中常见的输入流,由于每个输入流都有其对应的输出流,所以此处就不再列出输出流的继承结构图。



1、ByteArrayInputStream & ByteArrayOutputStream:

ByteArrayInputStream构造函数中需要传入一个byte数组作为数据源,当执行read操作时,就会从该数组中读取数据,正如其名,是一种基于字节数组实现的一种简单输入流,显而易见的是,如果在构造函数中传入了null作为字节数据,那么在执行read操作时就会出现NullPointerException异常,但是在构造函数初始化阶段不会抛出异常;与之相对应的是ByteArrayOutputStream,其内部也有一个字节数组用于存储write操作时写入的数据,在构造函数中可以传入一个size指定其内部的byte数组的大小,如果不指定,那么默认它会将byte数组初始化为32字节,当持续通过write向ByteArrayOutputStream中写入数据时,如果其内部的byte数组的剩余空间不能够存储需要写入的数据,那么那么它会通过调用内部的ensureCapacity
方法对其内部维护的byte数组进行扩容以存储所有要写入的数据,所以不必担心其内部的byte数组太小导致的IndexOutOfBoundsException之类的异常。

2、FileInputStream & FileOutputStream

FileInputStream 能够将文件作为数据源,读取文件中的流,通过File对象或文件路径等初始化,在其构造函数中,如果传入的File对象(或与其相对应的文件路径所表示的File对象)不存在或是一个目录而不是文件或者由于其他原因无法打开读取数据,都会导致在初始化阶段导致抛出FileNotFoundException异常;与FileInputStream 相对应的是FileOutputStream,可以通过FileOutputStream向文件中写入数据,也需要通过File对象或文件路径对其初始化,如同FileInputStream ,如果传入的File对象(或与其相对应的文件路径所表示的File对象)是一个目录而不是文件或者由于其他原因无法创建该文件写入数据,都会导致在初始化阶段抛出FileNotFoundException异常。

3、PipedInputStream & PipedOutputStream

PipedInputStream和PipedOutputStream一般是结合使用的,这两个类用于在两个线程间进行管道通信,一般在一个线程中执行PipedOutputStream 的write操作,而在另一个线程中执行PipedInputStream的read操作。可以在构造函数中传入相关的流将PipedInputStream 和PipedOutputStream 绑定起来,也可以通过二者的connect方法将二者绑定起来,一旦二者进进行了绑定,那么PipedInputStream的read方法就会自动读取PipedOutputStream写入的数据。PipedInputStream的read操作是阻塞式的,当执行PipedOutputStream的write操作时,PipedInputStream会在另一个线程中自动读取PipedOutputStream写入的内容,如果PipedOutputStream一直没有执行write操作写入数据,那么PipedInputStream的read方法会一直阻塞PipedInputStream的read方法所运行的线程直至读到数据。单独使用PipedInputStream或单独使用PipedOutputStream时没有任何意义的,必须将二者通过connect方法(或在构造函数中传入对应的流)进行连接绑定,如果单独使用其中的某一个类,就会触发IOException: Pipe Not Connected.

4、ObjectInputStream & ObjectOutputStream

ObjectOutputStream具有一系列writeXXX方法,在其构造函数中可以掺入一个OutputStream,可以方便的向指定的输出流中写入基本类型数据以及String,比如writeBoolean、writeChar、writeInt、writeLong、writeFloat、writeDouble、writeCharts、writeUTF等,除此之外,ObjectOutputStream还具有writeObject方法。writeObject方法中传入的类型必须实现了Serializable接口,从而在执行writeObject操作时将对象进行序列化成流,并将其写入指定的输出流中。与ObjectOutputStream相对应的是ObjectInputStream,ObjectInputStream有与OutputStream中的writeXXX系列方法完全对应的readXXX系列方法,专门用于读取OutputStream通过writeXXX写入的数据。

5、SequenceInputStream

SequenceInputStream 主要是将两个(或多个)InputStream在逻辑上合并为一个InputStream,比如在构造函数中传入两个InputStream,分别为in1和in2,那么SequenceInputStream在读取操作时会先读取in1,如果in1读取完毕,就会接着读取in2。在我们理解了SequenceInputStream 的作用是将两个输入流合并为一个输入流之后,我们就能理解为什么不存在对应的SequenceOutputStream 类了,因为将一个输出流拆分为多个输出流是没有意义的。

6、StringBufferInputStream

StringBufferInputStream允许通过在构造函数中传入字符串以读取字节,在读取时内部主要调用了String的charAt方法。与SequenceInputStream类似,StringBufferInputStream也没有对应的OutputStream,即不存在StringBufferOutputStream类。Java没有设计StringBufferOutputStream类的理由也很简单,我们假设StringBufferOutputStream存在,那么StringBufferOutputStream应该是内部通过执行write操作写入数据更新其内部的String对象,比如有可能是通过StringBuilder来实现,但是这样做毫无意义,因为一旦我们String的构造函数中可以直接传入字节数组构建字符串,简单明了,所以设计StringBufferOutputStream就没有太大的必要了。StringBufferInputStream这个类本身存在一点问题,它不能很好地将字符数组转换为字节数组,所以该类被Java标记为废弃的(Deprecated),其官方推荐使用StringReader作为代替。

7、FilterInputStream & FilterOutputStream

FilterInputStream包含了其他的输入流,说具体点就是在其构造函数中需要传入一个InputStream并将其保存在其名为in的字段中,FilterInputStream只是简单的覆盖了所有的方法,之所说是简单覆盖是因为在每个覆盖函数中,它只是调用内部的保存在in字段中的InputStream所对应的方法,比如在其覆盖read方法时,内部只是简单调用了in.read()方法。FilterInputStream的子类可以进一步覆盖某些方法以保持接口不变的情况下实现某一特性(比如其子类有的可以通过使用缓存优化读取的效率)或者提供一些其他额外的实用方法。所以在使用时FilterInputStream可以让传入的InputStream具有一些额外的特性,即对构造函数传入的InputStream进行了一层包裹,使用了典型的装饰着模式,如果只看FilterInputStream本身这一个类的话,则该类自己本身意义不大,因为其只是通过内部的字段in简单覆写某些方法。但是如果将FilterInputStream 和其子类结合起来使用话,那么就很有用了。比如FilterInputStream 有两个子类BufferedInputStream和DataInputStream,这两个类在下面还会详细介绍。BufferedInputStream对read操作做了优化,每次读操作时都读取一大块数据,然后将其放入内部维护的一个字节数组缓冲区中。当外面调用BufferedInputStream的read方法时,首先去该缓冲区中读取数据,这样就避免了频繁的实际的读操作,BufferedInputStream对外没有暴露额外的其他方法,但是其内部的read方法已经经过优化了,所以在执行读操作的时候效率更高。DataInputStream与ObjectInputStream有点类似,可以通过一些readXXX方法读取基本类型的数据,这是非常有用的一些方法。

8、BufferedInputStream & BufferedOutputStream

如上面所介绍的那样,在BufferedInputStream的构造函数中需要传入一个InputStream, BufferedInputStream内部有一个字节数组缓冲区,每次执行read操作的时候就从这buf中读取数据,从buf中读取数据没有多大的开销。如果buf中已经没有了要读取的数据,那么就去执行其内部绑定的InputStream的read方法,而且是一次性读取很大一块数据,以便填充满buf缓冲区。缓冲区buf的默认大小是8192字节,也就是8K,在构造函数中我们也可以自己传入一个size指定缓冲区的大小。由于我们在执行BufferedInputStream的read操作的时候,很多时候都是从缓冲区中读取的数据,这样就大大减少了实际执行其指定的InputStream的read操作的次数,也就提高了读取的效率。与BufferedInputStream 相对的是BufferedOutputStream。在BufferedOutputStream的构造函数中我们需要传入一个OutputStream,这样就将BufferedOutputStream与该OutputStream绑定在了一起。BufferedOutputStream内部有一个字节缓冲区buf,在执行write操作时,将要写入的数据先一起缓存在一起,将其存入字节缓冲区buf中,buf是有限定大小的,默认的大小是8192字节,即8KB,当然也可以在构造函数中传入size指定buf的大小。该buf只要被指定了大小之后就不会自动扩容,所以其是有限定大小的,既然有限定大小,就会有被填充完的时刻,当buf被填充完毕的时候会调用BufferedOutputStream的flushBuffer方法,该方法会通过调用其绑定的OutputStream的write方法将buf中的数据进行实际的写入操作并将buf的指向归零(可以看做是将buf中的数据清空)。如果想让缓存区buf中的数据理解真的被写入OutputStream中,可以调用flush方法,flush方法内部会调用flushBuffer方法。由于buf的存在,会大大减少实际执行OutputStream的write操作的次数,优化了写的效率。

I. java IO流

如果in==null,就说明in这个引用所指向的对象还没有被创建,自然in.close()也就不可能被执行,而且会报异常。我是这样想的,程序中如果你先声明变量InputStream(或者其他流类型)in=null;然后执行其他语句,再in=new、、、、在innew之前其他语句出exception,这时流没有被打开,也就无需关闭,如果不判断if(null!=in)硬要关闭in就出exception另外你的代码按如下写会更合理:if(null!=in){try{in.flush();in.close();in=null;}catch(IOExectione){};}

J. java中的IO流是什么啊该怎么理解啊

关于你这个方向性的问题我一开始学的时候也觉得反了。后来搞清楚目标对象就懂了。理解Java的IO流,首先要把视角放在内存上,而不是放在文件上。
InputStream是用来写入的没错,但不是写入文件中,而是写入内存中。所以InputStream的作用是从文件中读取数据然后写入内存中或者说写入到正在运行的程序中。
而OutputStream同理,是从内存/程序中将数据推送出去,把数据保存到文件中。
以Java程序作为主视角,你就能懂了。Input读取是为了读给程序用,Output写出是程序把数据输出到硬盘上了。

阅读全文

与javaio流相关的资料

热点内容
哪个app可以约大巴车 浏览:181
linux中seq命令 浏览:827
代理服务器的地址端口号码 浏览:163
程序员给领导提意见 浏览:460
哪里可以看夏木的电影app 浏览:452
如何辨别原装数据线安卓 浏览:631
手机pc游戏解压教程 浏览:696
安卓怎么设置高清动态壁纸 浏览:777
古剑七存档文件夹 浏览:376
mom服务器下载文件命令 浏览:277
office编程教程 浏览:672
为何称加密锁为加密狗 浏览:558
阿里云服务器远程异常 浏览:290
世界上最大的魔方解压球 浏览:417
书籍编译器下载 浏览:715
rosmoveit编程 浏览:198
人人讲app怎么使用 浏览:293
android查看文件工具 浏览:943
女程序员化妆视频大全 浏览:745
录音笔如何修改文件夹 浏览:645