当前位置: 首页 > 面试题库 >

将字符串写入输出流

邢项禹
2023-03-14
问题内容

我有几个正在实现OutputStream的输出侦听器。它可以是写到stdout或html" target="_blank">文件的PrintStream,也可以写到内存或任何其他输出目标。因此,我在方法中将OutputStream指定为参数。

现在,我已经收到了字符串。在此处写入流的最佳方法是什么?

我应该只使用Writer.write(message.getBytes())吗?我可以给它提供字节,但是如果目标流是字符流,那么它将自动转换吗?

我是否需要在这里使用一些桥接流?


问题答案:

流(InputStreamOutputStream)传输 二进制 数据。如果要向流中写入字符串,则必须首先将其转换为字节,或者换句话说,对其
进行编码
。您可以使用String.getBytes(Charset)方法手动(按照您的建议)进行操作,但应避免使用该String.getBytes()方法,因为该方法使用了JVM的默认编码,因此无法以可移植的方式可靠地对其进行预测。

不过,将字符数据写入流的通常方法是将流包装在中Writer(通常是PrintWriter),当您调用其write(String)(或print(String))方法时,将为您进行转换。InputStreams的相应包装是Reader。

PrintStream``OutputStream从某种意义上说,它是一种特殊的实现,它还包含自动编码字符串的方法(它在内部使用编写器)。但这仍然是一条小溪。无论是PrintStreamStream实现还是其他实现,都可以用writer安全地包装流。没有双重编码的危险。

具有OutputStream的PrintWriter的示例:

try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
    p.println("Hello");
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
}


 类似资料:
  • 我有几个输出侦听器正在实现。它可以是写到stdout或文件的,也可以是写到内存或任何其他输出目标;因此,我在方法中指定作为(an)参数。 现在,我收到了。在这里向流写入的最佳方式是什么? 我应该只使用吗?我可以给它字节,但如果目标流是字符流,那么它会自动转换吗? 我需要用这里的一些桥流来代替吗?

  • 我想有一个字符串的freemarker模板输出。我有一个freemarker模板文件commonTemplate。ftl。 Java代码填充模型并将输出打印到控制台App.java. 它适用于控制台输出。

  • 主要内容:字符串的输出,字符串的输入其实在《 C语言输入输出》一章中我们已经提到了如何输入输出字符串,但是那个时候我们还没有讲解字符串,大家理解的可能不透彻,所以本节我们有必要再深入和细化一下。 字符串的输出 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串。 printf():通过格式控制符输出字符串,不能自动换行。除了字符串,printf() 还能输

  • 在高版本浏览器和 node.js 中,JavaScript 提供了 ArrayBuffer 和 Uint8Array 等 TypedArray 可以对二进制数据进行操作。但在低版本浏览器中并没有这些对象,而且这些对象没有自动伸缩性,不方便流式操作,相互转换也比较麻烦。 为兼容低版本浏览器,并且可以方便操作字符串和二进制数据,hprose for JavaScript 提供了一个 StringIO

  • wef:使用apache poi写入xlsm(Excel 2007) 当我向文件中写入一个简单的字符串时,我无法打开该文件。错误-“Excel无法打开文件“Test1.xlsm”,因为文件格式或文件扩展名无效”

  • 《 C++ cout.put()》一节中,讲解了 ostream 类提供的 put() 成员方法的用法,其用于向输出流缓冲区中添加要输出的单个字符。而在某些场景中,我们还需要输出指定的字符串,这时可以使用 ostream 类提供的 write() 成员方法。 write() 成员方法专用于向输出流缓冲区中添加指定的字符串,初学者可以简单的理解为输出指定的字符串。其语法格式如下: ostream&w