string-关于java输出流ByteArrayOutputStream的toString()方法

问题描述

关于java输出流ByteArrayOutputStream的toString()方法

import java.io.*;

public class ByteArrayOutputStreamtoString {
public static void main(String[] args){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try{
dos.writeBoolean(true);
dos.writeDouble(2.345456);
dos.writeFloat(1.234354f);
String s = baos.toString();
System.out.println(s);
}catch(IOException e){
e.printStackTrace();
}
}
}


他的输出为什么是“@?~oq?????P”这样的乱码?,还有toString()这个方法的用法是什么?是用来干什么的呢?

解决方案

不是这样用的 , ByteArrayOutputStream 存的是字节数组, toString 只是简单的把里面的 byte数组转成了字符串。程序可不知道你要怎么解析 byte。
出现乱码很正常。 下面给你正确的用法

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * Created by chenhong on 16/3/10.
 */
public class Main {

    public static void main(String[] args){

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        try{

            dos.writeBoolean(true);  //boolean 1位
            dos.writeInt(2); // int 32位   4字节
            dos.writeFloat(1.234354f); // float 32位   32字节

            byte[] bArray = baos.toByteArray();
            System.out.println("共"+bArray.length+"字节");
            for (int i = 0; i < bArray.length; ++i){
                    System.out.println(bArray[i]+" ");
            }

        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

解决方案二:

看一下源代码中是这样解释的:
public synchronized String toString() {
return new String(buf, 0, count);
}
使用默认的编码格式解码buf中的字节为一个字符串。

解决方案三:

首先,输出乱码是因为这个类重写了父类的toString方法,本质将创建的是利用缓冲区内的数据创建了一个字符串返回了,java字符串默认的编码格式是UTF-8,所以将你的缓冲区内的数据编码返回String后出现了乱码问题。
其次,toString方法作用就是输出这个对象信息的,如果使用Object默认的方法输出这个对象的地址,所以我们如果要想看到有意义的输出信息,通常是需要自己重写这个方法的。它就是输出对象信息的。

时间: 2024-09-21 19:34:43

string-关于java输出流ByteArrayOutputStream的toString()方法的相关文章

Java的toString()方法

Java 基础内容 toString方法我们处处都用到,是一个很重点的小知识,这里大概讲一下: 我们查阅 API文档,查看java.lang.Object类的toString方法的详细描述是这样的: toString public String toString() Returns a string representation of the object. In general, the toString method returns a string that "textually repr

JAVA中toString方法的作用

以下是对在JAVA中toString方法的作用进行了详细的分析介绍,需要的朋友可以参考下   因为它是Object里面已经有了的方法,而所有类都是继承Object,所以"所有对象都有这个方法". 它通常只是为了方便输出,比如System.out.println(xx),括号里面的"xx"如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法  回答补充:写这个

java ee-java OJ中为什么要重写toString方法

问题描述 java OJ中为什么要重写toString方法 如题,看别人代码,实体类中重写了toString方法,为什么要写出下面这样?有什么好处? @Override public String toString() { return ToStringBuilder.reflectionToString(this); } 解决方案 默认类的toString不输出属性,这个重写后可以输出属性值.这重写不重写看自己需要

java中toString方法干嘛用的

问题描述 java中toString方法干嘛用的 java中toString方法干嘛用的 为什么打印一个对象会自动调用该对象的 toString方法 该方法的应用场景是什么? 解决方案 你打印的时候,打印的对象必须是string,如果你对象不是这个类型,输入就会把这对象强制转换为string 不然他会报错. 解决方案二: 解决方案三: 百度就有,这个问题不是很难,百度资料很详细. 解决方案四: Java中的toString方法关于Java中的toString()方法java toString()

java + tostring-为什么我写的toString方法实现不了

问题描述 为什么我写的toString方法实现不了 class Person { String name; int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } public

java中toString 方法是什么

问题描述 java中toString 方法是什么 求大神指点 java中toString 方法 是如何使用的 解决方案 toString方法是在直接输出对象时,如System.out.println(obj)时自动调用的方法,如Date类,你可以重写toString 方法,按照你自己的方式格式化输出你想要的字符串 解决方案二: http://www.cnblogs.com/zhangjs8385/archive/2011/10/10/2205281.html 你去这个地址看吧 ,我感觉还不错 解

浅析JAVA中toString方法的作用_java

因为它是Object里面已经有了的方法,而所有类都是继承Object,所以"所有对象都有这个方法". 它通常只是为了方便输出,比如System.out.println(xx),括号里面的"xx"如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法 回答补充:写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用例子1: 复制代码 代码如下: publ

关于java中toString方法中,空格的作用,求指点

问题描述 importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.Collections;importjava.util.Comparator;importjava.util.Set;importjava.util.TreeSet;/*下面文

C# 制作Com组件:java调用.net DLL的方法

本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:"在Java项目中必须使用其提供的用.net写的DLL加密机制!" 环境与工具: ◆.net framework 3.5 C# ◆java jdk1.5, Tomcat 5.5 ◆jacob-1.15-M3 实现例子: 一.C# 制作Com组件 新建一个Class 项目,取名TestCom 代码 using System;  using System.Collections.Generic;  us