3

我正在阅读这篇文章。它有以下片段

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");

while(moreData) {
  int data = getMoreData();
  output.write(data);
}
output.close();

提到:

OutputStreams用于写入基于字节的数据,一次一个字节。an的write()方法OutputStream接受一个int包含要写入的字节的字节值。

假设我正在将字符串写入Hello World文件,因此字符串中的每个字符都会转换为intusinggetMoreData()方法。它是怎么写的?作为字符或字节output-text.txt?如果它以字节形式写入,那么如果我必须将字节“重新转换”为字符,那么以字节形式写入有什么好处?

4

4 回答 4

2

这篇文章是不完整的,因为 anOutputStream具有用于 write 的重载方法,这些方法采用 a byte[]、 abyte[]以及offsetlength参数,或单个int.

String如果在您拥有的唯一接口是OutputStream(假设您不知道底层实现是什么)时将 a写入流,使用output.write(string.getBytes()). int与传递字节数组的单个 write 调用相比,迭代地一次剥离单个并将其写入文件将执行可怕的操作。

于 2013-09-11T01:46:37.463 回答
2

每个字符(以及几乎任何存储在文件中的内容)都是一个 byte / bytes。例如:

  • 小写“a”写为一个字节,十进制值为 97。
  • 数字“1”写为一个字节,十进制值为 49

一旦信息写入文件,就不再有数据类型的概念,一切都只是字节流。重要的是用于将信息存储到文件中的编码

看看ascii 表,对于初学者学习信息编码非常有用。

为了说明这一点,创建一个包含文本“hello world”的文件

$ echo 'hello world' > hello.txt

od然后使用命令输出写入文件的字节:

$ od -td1 hello.txt
0000000  104  101  108  108  111   32  119  111  114  108  100   10
0000014

上面的意思是,在文件开头的地址 0000000 处,我看到一个十进制值为 104 的字节(即字符“h”),然后是一个十进制值为 101 的字节(即字符“e”),依此类推。 .

于 2013-09-11T01:35:19.403 回答
1

流对字节进行操作并简单地读取/写入原始数据。

读取器和写入器使用 UTF-8 或 US-ASCII 等字符集将基础数据解释为字符串。这意味着它们可能采用 8 位字符 (ASCII) 并将数据转换为 UTF-16 字符串。

流使用字节,读取器/写入器使用字符串(或其他复杂类型)。

于 2013-09-11T01:36:32.120 回答
0

Java.io.OutputStream 类是表示字节输出流的所有类的超类。当字节被写入 OutputStream 时,它可能不会立即写入字节,而是 write 方法可能会将字节放入缓冲区。

有以下几种写法:

  1. 无效写(字节[] b)

此方法将 b.length 个字节从指定的字节数组写入此输出流。

  1. 无效写入(字节 [] b,int 位置,int 长度)

此方法将从偏移位置开始的指定字节数组中的长度字节写入此输出流。

  1. 无效写入(int b)

此方法将指定字节写入此输出流。

于 2016-12-25T16:16:37.590 回答