将Java.Io.OuttoString的输出管到Java中的字符串的最佳方法是什么?

假设我有方法:

writeToStream(Object o, OutputStream out)

它将对象中的某些数据写入给定的流。但是,我希望尽可能容易地将这个输出转换成一个字符串。

我正在考虑写这样一个类(未经测试):

class StringOutputStream extends OutputStream {

StringBuilder mBuf;

public void write(int byte) throws IOException {

mBuf.append((char) byte);

}

public String getString() {

return mBuf.toString();

}

}

但是有更好的方法吗?我只想做个测试!

你只有ASCII字节吗?你不需要代码页吗?

在这种情况下,是的。不过,说得对-我没想过。

我会用一个ByteArrayOutputStream。完成后,你可以打电话:

new String( baos.toByteArray(), codepage );

或更好

baos.toString( codepage );

对于字符串构造函数,codepage可以是字符串或java.nio.charset.charset的实例。可能的值是java.nio.charset.standardcharset.utf_8。

ToString方法只接受一个字符串作为EDCOX1×1参数(Read Java 8)。

BytearrayOutputStream没有toArray()方法;但它确实有toBytearray()。你能解决这个问题吗?另外,为什么不使用bao.toString(string charsetname),这会稍微简单一些。

感谢您提供ToString(Charset)的提示。我从来没有看过toString,因为我期待一个bytearrayOutputstream@123456。我还纠正了tobytearray()的错误。

另外请注意,除非您通过自定义安装明确要求某些代码页,否则不会安装它们。

可以简单返回bao.toString(),coepage的作用是什么?

字节数组只是二进制数据。由于(unicode)文本可以以多种不同的方式进行二进制编码,bytearrayOutputstream需要知道使用什么编码来编码字节,因此它可以使用相同的编码再次将字节解码为字符串。简单地使用ToStand不带参数是不明智的,因为你只是忽略了问题而不是解决它;Java将使用平台编码,这可能是正确的或不正确的。基本上是随机的。您需要找出用于将文本写入字节并将该编码传递给ToString的编码方式。

你能在答案中提供一个代码示例吗?

对这里引用的代码页进行了澄清:在Java中,您可以使用字符集.DaultCARSSET()或字符集(FordNeal.FordNead);对我来说工作的是:新字符串(Boo.ToBytErayRaye),字符集.Debug THARSETSER();

@使用defaultCharset的wallaceborn并不比完全忽略字符集好——在使用toString之前,您需要了解它是什么。

@Artbristol:虽然你关于defaultCharset的警告在技术上是正确的,但对于这个例子(一个单元测试),它似乎无关紧要——字符串将在同一台机器上,在同一个程序执行期间进行编码和解码。使用不同的代码页确实没有风险。

@是的,你是对的,如果它在同一台机器上编码和解码,那就好了。不过,如果单元测试将结果与某个固定字符串进行比较呢?

@只有当作者也使用defaultCharset时,才会自动切换。

StandardCharsets.UTF_8是Charset,不是String。此外,该参数称为charsetName,而不是codepage。

我喜欢Apache Commons IO库。看看它的bytearrayOutputstream版本,它有一个toString(String enc)方法和toByteArray()方法。使用现有的和可信的组件(如Commons项目)可以使代码更小、更容易扩展和重新调整用途。祝你好运。

为你自己节省一年的时间,阅读所有公共的API,这样当你遇到问题时,你就可以发布一个完全测试过的社区拥有的解决方案。

嗯,我是一个狂热的ApacheCommons用户,但在这种情况下,我不明白为什么你应该使用Commons IO的BytearrayOutputstream而不是JDK自己的java.io.BytearrayOutputstream。后者还提供toString(string charsetname)和tobytearray()方法。想详细说明吗?

是的,因为原始上下文是一种更好的流式和提取内容的方法,所以我包括了commons IO示例,因为它包含了一个"write(inputstream)"方法,用于填充输出流的当时未定义/可疑的机制。我也会和JDK一起去。

这很管用

OutputStream output = new OutputStream()

{

private StringBuilder string = new StringBuilder();

@Override

public void write(int b) throws IOException {

this.string.append((char) b );

}

//Netbeans IDE automatically overrides this toString()

public String toString(){

return this.string.toString();

}

};

方法调用=>>marshaller.marshal( (Object) toWrite , (OutputStream) output);。

然后打印或获取字符串,只需引用"输出"流本身例如,将字符串输出到console=>>System.out.println(output);。

仅供参考:我的方法调用marshaller.marshal(Object,Outputstream)用于处理XML。这与这个话题无关。

这对于生产性使用是非常浪费的,有一个方法转换太多,而且有点松散。这只是为了向您证明完全可以创建自定义的ouputstream并输出字符串。但只要按Horcrux7的方式进行,只需两个方法调用就可以了。

世界就在另一天…

只需将一个字节转换为字符,就只能在ASCII上工作。像Horcrux7一样使用BytearrayOutputstream

同意戴夫·雷。您不能假定您的字节是一个ASCII字符。您需要使用编码来解释字节。使用bytearrayOutputstream.toString("utf-8")或新字符串(bytearrayOutputstream.tobytearray(),"utf-8")。

我最后做的是:

Obj.writeToStream(toWrite, os);

try {

String out = new String(os.toByteArray(),"UTF-8");

assertTrue(out.contains("testString"));

} catch (UnsupportedEncondingException e) {

fail("Caught exception:" + e.getMessage());

}

其中os是一个ByteArrayOutputStream。

您的代码中的"OS"是什么?

@Javajigs我在5年前的答案底部澄清了这一点。)

考虑用StandardCharsets.UTF_8替换"UTF-8"。

java outputstring_关于java:将OutputStream转换为String相关推荐

  1. 在Java中将字符串转换为char数组,将char数组转换为String

    Today we will learn how to convert String to a char array and then char array to String in Java. 今天, ...

  2. java printwriter 文件_关于java:如何将PrintWriter转换为String或写入文件?

    我正在使用JSP生成动态页面,我想将此动态生成的完整页面保存为文件存档. 在JSP中,所有内容都写入PrintWriter out = response.getWriter(); 在页面的末尾,在向客 ...

  3. Java把List转换为String使用stream(functional programming in java)

    文章目录 遇到问题 解决方法 参考 遇到问题 项目有需求:java把List转换为String,用于后续匹配. 解决方法 String guess = word.stream().map(charac ...

  4. 2个在Java中将Byte []数组转换为String的示例

    将字节数组转换为String似乎很容易,但是很难做到正确. 每当字节转换为String或char时,许多程序员都会犯忽略字符编码的错误,反之亦然. 作为程序员,我们都知道计算机只能理解二进制数据,即0 ...

  5. android double转string_如何使用Java程序将Double转换为String

    在Java中将String转换为Double 至少有三种方法可以将表示double值的String 转换为Double对象.可能还有多种方法可以做同样的事情,如果你了解此处还有未列出的其他转换方法,请 ...

  6. Java char转换为String,String转换为char数组

    Today we will look into java char to String program. We will also learn how to convert String to a c ...

  7. Java InputStream转换为String

    Today we will learn how to convert InputStream to String in Java. While working on files, sometimes ...

  8. java float转换_Java float转换为String

    Java将float转换为String 我们可以使用String.valueOf()和Float.toString()方法在Java中将float转换为String. 情境 如果必须在文本字段中显示浮 ...

  9. java 如何将byte中的有效长度转换为String

    一般的我们使用byte接收读取到的数据,若数据没有达到byte定义的大小时,我们直接将byte转换为String则会出现乱码的情况,在这种情况下应该基于read的返回值来转换byte,否则将产生乱码的 ...

最新文章

  1. springboot 订单重复提交_瞬间几千次的重复提交,我用Spring Boot+Redis扛住了
  2. VSS2005 上传pdf 空白
  3. huffman树java_HuffmanTree - java实现
  4. robot 用AP连PC
  5. 深入理解 sudo 与 su 之间的区别【转】
  6. mysql压缩包安装教程8.0.19,win10安装zip版MySQL8.0.19的教程详解
  7. C#:安装Windows服务,动态指定服务名及描述
  8. php+crontab+shell方案实现的秒级定时发起异步请求回调方案
  9. NUC1154 Vertical Histogram【打印图案】
  10. TensorFlow读取自己数据集的几个小方法
  11. 【ESD专题】案例:同样是RS485芯片,ESD的性能却天差地别?
  12. freemarker加载模板目录的方法
  13. Matrix Concatenate 矩阵串联
  14. android 通知写法_Android消息通知-Notifation
  15. Seq2Seq and NMT(基于cs224n的最全综述神经机器翻译技术)
  16. android edittext怎么输入中文,为什么android中edittext不能输入中文
  17. 怎么把ogg音频格式转换为mp3
  18. WormHole是一个简单、易用的api管理平台,支持dubbo服务调用
  19. 二.某龙端游中LUA的分析和调用
  20. 5.3Web服务器简介及HTTP协议

热门文章

  1. 桌面远程连接工具哪款最好用
  2. 耗时整整3个月,我梳理了200道Android面试基础(上)【面试必考,全网最全,每天一遍】
  3. 766.托普利茨矩阵
  4. 再论互联网公司盖楼那些事-北丐 华为们
  5. Android Clock控件
  6. influxDb数据备份
  7. 【记录】初探FRP+云服务器实现端口映射(2020.7.27)
  8. 一、MyBatis-Plus 入门
  9. 鸿水点评:春晚四小花旦
  10. 区块链:诞生于草根的时尚