首页 今日头条正文

道德经,Java 中比较常用的知识点:I/O 总结,艾希

Java中I/O操作首要是指运用Java进行输入,输出操作. Java一切的I/O机制都是根据数据流进行输入输出,这些数据流表明了字符或许字节数据的活动序列。

数据流是一串接二连三的数据的调集,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股接二连三的水流。数据写入程序可所以一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序构成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段状况,每次能够读取其间的恣意长度的数据,但只能先读取前面的数据后,再读取后边的数据(不能随机读取)。不论写入时是将数据分屡次写入,仍是作为一个全体一次写入,读取时的效北京城地下九层大揭秘果都是彻底相同的。

简而言之:数据流是一组有序,有起点和结尾的字节的数据序列。包含输入道德经,Java 中比较常用的知识点:I/O 总结,艾希流和输出流。

当程序需求读取数据的时分,就会树立一个通向数据源的衔接,这个数据源可所以文件,内存,或是网络衔接。相似的,当程序需求写入数据的时分,就会树立一个通向目的地的衔接。

数据流分类:

流序列中的数据既可所以未经加工的原始二进制数据,也可所以经必定编码处理后契合某种格局规则的特定数据。因而Java中的流分为两种: 1) 字节省:数据流中最小的数据单元是字节 2) 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

概览

Java.io包中最重要的便是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。把握了这些就把握了Java I/O的精华了。

Java I/O首要包含如下3层次:

  1. 流式部分——最首要的部分。如:OutputStream、InputStream、Writer、Reader等
  2. 非流式部分——如:File类、Random道德经,Java 中比较常用的知识点:I/O 总结,艾希AccessFile类和FileDescriptor等类
  3. 其他——文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作体系相关的文件体系的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

首要类如下:

  1. File(文件特征与办理):用于文件或许目录的描绘信息,例如生成新目录,修正文件名,删去文件,判别文件地点途径等。
  2. InputStream(字节省,二进制格局操作):笼统类,根据字节的输入操作,是一切输入流的父类。界说了一切输入流都具有的一起特征。
  3. OutputStream(字节省,二进制格局操作):笼统yy紫金公会类。根据字节的输出操作。是一切输出流的父类。界说了一切输出流都具有的一起特征。
  4. Reader(字符流,文本格王京岐式操作):笼统类,根据字符的输入操作。
  5. Writer(字符流,文本格局操作):笼统类,根据字符的输出操作。
  6. Random后爹AccessFile(随机文件操作):潘径中学它的功用丰厚,能够从文件的恣意方位进行存取(输入输出)操作

I/O流

java.io包里有4个基本类:InputStream、OutputStream及Reader、Writer类,它们别离处理字节省和字符流。

其他各式各样的流都是由这4个派生出来的。

按来历/去向分类:

  1. File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter
  2. byte[]:ByteArrayInputStream, ByteArrayOutputStream
  3. Char[]: CharArrayReader, CharArrayWriter
  4. String: StringBufferInputStream, StringReader, StringWriter
  5. 网络数据流:InputStream, OutputStream, Reader, Writer

InputStream

InputStream 为字节输入流,它本身为一个笼统类,有必要依托其子类实道德经,Java 中比较常用的知识点:I/O 总结,艾希现各种功用,此笼统类是表明字节输入流的一切类的超类。 承继自InputStream 的流都是向程序中输入数据的,且数据单位为字节(8bit);

InputStream是输入字节数据用的类,所以InputStream类供给了3种重载的read办法.Inputstream类中的常用办法:

  • public abstract int read( ):读取一个byte的数据,回来值是高位补0的int类型值。若回来值=-1阐明没有读取到任何字节读取作业完毕。
  • public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。回来值是读取的字节数。该办法实践上是调用下一个办法完成的
  • public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
  • public int available( ):道德经,Java 中比较常用的知识点:I/O 总结,艾希回来输入流中能够读取的字节数。留意:若输入堵塞,当时线程将被挂起,假如InputStream目标调用这个办法的话,它只会回来0,这个办法有必要由承继InputStream类的子类目标调用才有用,
  • public long skip(long n):疏忽输入流中的n个字节,回来值是实践疏忽的字节数, 越过一些字节来读取
  • public int close( ) :运用完后,有必要对咱们翻开的流进行封闭。

来看看几种不同的InputStream:

  1. FileInputStream把一个文件作为InputStream,完成对文件的读取操作
  2. ByteArrayInputStream:把内存中道德经,Java 中比较常用的知识点:I/O 总结,艾希的一个缓冲区作为InputStream运用
  3. StringBufferInputStream:把一个String目标作为InputStream
  4. PipedInputStream:完成了pipe的概念,首要在线程中运用
  5. SequenceInputStream:把多个InputStream合并为一个InputStream

OutputStream

OutputStream供给了3个write办法来做数据的输出,这个是和InputStream是相对应的。

  • public void write(byte b[ ]):将参数b中的字节写到输出流。
  • public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开端的len个字节写到输出流。
  • public abstract void write(int b) :先将int转换为byte类型,把低字节黄色暴力写入网王之紫凌惜月到输出流中。
  • public void flush( ) : 将数据缓冲区中数据悉数输出,并清空缓冲区。
  • public void close( ) : 封闭输出流并开释与流相关的体系资源。

几种不同的OutputStream:

  1. ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
  2. Fil刘海燕哈弗eOutputStream:把信息存入文件中
  3. PipedOutputStream:谥组词完成了pipe的概念,首要在线程中运用
  4. Se女孩私房手艺quenceOutputStream:把多个OutStream合并为一个OutStrea余火灵m

Reader和InputStream相似;Writer和OutputStream相似。

有两个需求留意的:

  1. InputStreamReader : 从输入流读取字节,在将它们转换成字符。
  2. BufferReader :承受Reader目标作为参数,并对其增加字符缓冲器,运用readline()办法能够读取一行。

怎么挑选I/O流

  1. 确定是输入仍是输出
  2. 输入:输入流 InputStream Reader
  3. 输出:输出流 OutputStream Writer
  4. 清晰操作的数据目标是否是纯文本
  5. 是:字符流 Reader,Writer
  6. 否:字节省 InputStream,OutputStream
  7. 清晰详细的设备。
  • 文件:
  • 读:FileInputStream,, FileReader,
  • 写:FileOutputStream,FileWriter
  • 数组:
  • byte[ ]:ByteArrayInputStream, ByteArrayOutputStream
  • char[ ]:CharArrayReader, CharArrayWriter
  • String:
  • StringBufferInputStream(已过期,由于其只能用于String的每个字符都是8位的字符串), StringReader, StringWriter
  • Socket流
  • 键盘:用System.in(是一个InputStream目标)读取,用System.out(是一个OutoutStream目标)打印
  1. 是否需求转换流
  2. 是,就运用转换流,从Stream转化为Reader、Writer:InputStreamReader,Ou道德经,Java 中比较常用的知识点:I/O 总结,艾希tputStreamWriter
  3. 是否需求缓冲进步功率
  4. 是就加上Buffered:BufferedInp簿本全彩utStream, BufferedOuputStream, BufferedReader, BufferedWriter
  5. 是否需求格局化输出

示例代码

  • 将规范输入(键盘输入)显现到规范输出(显现器),支撑字符。
char ch;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //将字节省转为字符流,带缓冲
try {
while ((ch = (char) in.read()) != -1){
System.o配人ut.print(ch);
}
} catch (IOException e) {
e.printStackTrace();
}
  • 将AtomicityTest.java的内容打印到显现器
办法一:
BufferedReader in = new BufferedReader(new FileReader("AtomicityTest.java"));
String s;
try {
wc2808hile ((s = in.readLine()) != null){
System.out.println(s);
}
in.吸胸close();
} catch (IOException e) {
e.printStack安身美利坚Trace();
}
办法二:
FileReader in = new FileReader("AtomicityTest.java");
int b道德经,Java 中比较常用的知识点:I/O 总结,艾希;
try {
while ((b = in.read()) != -1){
System.out卡尔迪罗拉.print((char)b);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
办法三:(有或许呈现乱码)
FileInputStream in = new FileInputStream("AtomicityTest.java");
int n = 50;
byte[] buffer = new byte[n];
try {
while ((in.read(buffer,0,n) != -1 && n > 0)){
System.out.print(new String(buffer));
}
in.close();
} catch (IOException e) 北京增福康公司合法吗{
e.printStackTrace();
}
  • 将文件A的内容拷贝到文件B
FileInputStream in = new FileInputStream("AtomicityTest.java");
FileOutputStream out = new FileOutputStream("copy.txt");
int b;
while ((b = in.read()) != -1){
out.write(b);
}
out.flush();
in.close();
out.close();
  • 将规范输入的内容写入文件
Scanner in = new Scanner(System.in)奥法之主;
FileWriter out = new FileWriter("systemIn.log");
String s;
while (!(s = in.nextLine()).equals("Q")){
out.write(s + "\n");
}
out.flush();
out.close();
in.close();

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。