Input Streams.read()究竟如何工作?

问题描述 投票:4回答:1

我有以下代码:

public static void main(String[] args) throws Exception {

 FileInputStream inputStream = new FileInputStream("c:/data.txt");

 FileOutputStream outputStream = new FileOutputStream("c:/result.txt");

 while (inputStream.available() > 0) {
  int data = inputStream.read(); 
  outputStream.write(data); 
 }

 inputStream.close(); 
 outputStream.close();
}

我不明白以下内容:int data = inputStream.read();

获取文件c:/data.txt的字节,逐字节读取,然后在变量数据中自动串联,或者inputStream.read()一次全部读取文件c:/data.txt并将所有内容分配给数据变量?

java stream inputstream
1个回答
3
投票

来自JavaDoc

A FileInputStream从文件系统中的文件获取输入字节。FileInputStream用于读取原始字节流,例如图像数据。要阅读字符流,请考虑使用FileReader

问题:获取文件c:/data.txt的字节,逐字节读取,然后在变量中自动串联数据或inputStream.read()读取文件c:/data.txt 全部位于一次,然后将所有内容分配给数据变量?

为了回答这个问题,请举例:

try {
  FileInputStream fin = new FileInputStream("c:/data.txt");
  int i = fin.read();
  System.out.print((char) i);
  fin.close();
} catch (Exception e) {
  System.out.println(e);
}

在运行上述程序之前,创建了一个带有文本data.txtWelcome to Stackoverflow文件。

执行上述程序后,控制台将打印单张文件中的字符87(字节形式),很清楚指示FileInputStream#read用于读取字节输入流中的数据。


因此,FileInputStream通过byte读取数据byte


-1
投票

Java FileInputStream类java.io.FileInputStream使得可以将文件的内容读取为字节流。

Java FileInputStream类是Java InputStream的子类。这意味着您将Java FileInputStream用作InputStream(FileInputStream的行为类似于InputStream)。

InputStream的read()方法返回一个int,其中包含读取的字节的字节值。这是一个InputStream read()示例:

int data = inputstream.read();

有关更多详细信息,您可以在这里post 1签出>>

java.io.InputStream.read(byte[] b, int off, int len)方法从输入流最多读取len个字节的数据到一个字节数组中。如果参数len为零,则不读取任何字节,并返回0;否则,返回0。否则,尝试读取至少一个字节。如果流在文件的末尾,则返回的值为-1。

声明:

public int read(byte[] b, int off, int len)

有关更多信息,您可以通过post 2

© www.soinside.com 2019 - 2024. All rights reserved.