【问题标题】:I want to convert an output stream into String object我想将输出流转换为 String 对象
【发布时间】:2026-02-11 22:30:01
【问题描述】:

我想将OutputStream 转换为String 对象。我在编组 JAXB 对象后返回了一个 OutputStream 对象。

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    对 jaxb 不太熟悉,据我所知,您可以使用以下方法将其转换为字符串

    public String asString(JAXBContext pContext, 
                            Object pObject)
                                throws 
                                    JAXBException {
    
        java.io.StringWriter sw = new StringWriter();
    
        Marshaller marshaller = pContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.marshal(pObject, sw);
    
        return sw.toString();
    }
    

    ws.apache.org

    但我不确定搅拌物体。仍在寻找。

    ** 编辑

    编组一个非元素

    另一个常见的用例是你 有一个没有的对象 @XmlRootElement 就可以了。 JAXB 允许您 像这样编组它:

    marshaller.marshal(新 JAXBElement(
    新的 QName("","rootTag"),Point.class,new 点(...)));

    这会将元素作为 根元素,后跟内容 的对象,那么 。你 实际上可以将它与一个类一起使用 有@XmlRootElement,这很简单 重命名根元素名称。

    第一眼第二眼 Point.class 参数可能看起来 多余的,但实际上是必要的 确定编组器是否会 产生(臭名昭著的)@xsi:type。在这个 例如,类和 实例是点,所以你不会看到 @xsi:类型。但如果它们不同, 你会看到的。

    这也可以用于编组 简单对象,例如 String 或 an 整数。

    marshaller.marshal(新 JAXBElement(
    新的 QName("","rootTag"),String.class,"foo 酒吧"));

    但不幸的是它不能用于 编组对象,如 List 或 Map,如 他们没有被当作头等舱对待 JAXB 世界的公民。

    找到HERE

    【讨论】:

    • 只是在这里说明一下,StringWriter 方法确实有效。谢谢!
    【解决方案2】:
        StringWriter sw = new StringWriter();
        com.integra.xml.Integracao integracao = new Integracao();
        integracao.add(...);
    try {
        JAXBContext context = JAXBContext.newInstance("com.integra.xml");
        Marshaller marshaller = context.createMarshaller();
        marshaller.marshal(integracao, sw );
        System.out.println(sw.toString());
    } catch (JAXBException e) {
        e.printStackTrace();
    }
    

    【讨论】:

    • 迄今为止最干净的方法
    【解决方案3】:
    public String readFile(String pathname) throws IOException {
        File file = new File(pathname);
        StringBuilder fileContents = new StringBuilder((int) file.length());
        Scanner scanner = new Scanner(file);
        String lineSeparator = System.getProperty("line.separator");
    
        try {
            while (scanner.hasNextLine()) {
                fileContents.append(scanner.nextLine() + lineSeparator);
            }
            return fileContents.toString();
        }
        finally {
            scanner.close();
        }
    }    
    

    处理 XML 并将其转换为字符串的方法。

    JAXBContext jc = JAXBContext.newInstance(ClassMatchingStartofXMLTags.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        //store filepath to be used
        String filePath = "YourXMLFile.xml";
        File xmlFile = new File(filePath);
        //Set up xml Marshaller
        ClassMatchingStartofXMLTags xmlMarshaller = (ClassMatchingStartofXMLTags) unmarshaller.unmarshal(xmlFileEdit);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        // Use marshall to output the contents of the xml file
        System.out.println("Marshalled XML\n");
        marshaller.marshal(xmlMarshaller, System.out); 
        //Use Readfile method to convert the XML to a string and output the results
        System.out.println("\nXML to String");
        String strFile = ReadFile(xmlFile)
        System.out.println(strFile);     
    

    类中获取 XML 并对其进行编组的方法 编辑上述方法将输出编组的xml和xml作为字符串。

    【讨论】:

    • 这非常令人费解,并且不是清晰或正确的Java。原作者手头不一定有 XML 文件;这个问题提到了一个OutputStream。
    【解决方案4】:

    是的,有一种方法可以做到:只需将字符串编写器作为输入传递给它。这样创建的xml就会被写入它

       public void saveSettings() throws IOException {
           FileOutputStream os = null;
           //Declare a StringWriter to which the output has to go
           StringWriter sw = new StringWriter();
           try {
               Answer ans1=new Answer(101,"java is a programming language","ravi");  
               Answer ans2=new Answer(102,"java is a platform","john");  
    
               ArrayList<Answer> list=new ArrayList<Answer>();  
               list.add(ans1);  
               list.add(ans2);  
    
               settings=new Question(1,"What is java?",list); 
               os = new FileOutputStream(FILE_NAME);
               this.marshaller.marshal(settings, new StreamResult(sw));
               System.out.println(sw.toString());
               new File(FILE_NAME).delete();
           } finally {
               if (os != null) {
                   os.close();
               }
           }
       }
    

    【讨论】: