2013-09-07 5 views
6

मार्शलर (javax.xml.bind.Marshaller) लाइन विभाजक (कैरिज रिटर्न, नई लाइन, लाइन ब्रेक) को बदलने के लिए किस संपत्ति का उपयोग किया जाता है?जेएक्सबी मार्शलर लाइन विभाजक कैसे बदलें?

मेरा मानना ​​है कि मार्शलर सिस्टम के लाइन विभाजक का उपयोग कर रहा है।

System.getProperty("line.separator") 

हालांकि एक अलग एस्केप अनुक्रम की जरूरत है (अर्थात \r\n\n या ठीक इसके विपरीत बदलने की आवश्यकता)।

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

marshaller.setProperty("line.separator", "\r\n"); 

उत्तर

6

कोई ऐसी संपत्ति नहीं है जिसे आप अनुकूलित कर सकें। अधिकांश implementations लाइन बफ़र विभाजक के लिए सीधे भेज:

write('\n'); 

हालांकि, अगर आप परिणाम बदल सकते हैं।

Marshaller marshaller = ctx.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 

StringWriter writer = new StringWriter(1024); // 2 KB 
marshaller.marshal(obj, writer); 

String str = writer.toString(); 
str = str.replace("\n", "\r\n"); 

प्रदर्शन पर कोई असर बचने के लिए आप java.io.StringWriter के लिए निर्माता में अनुमानित आकार (जैसे 1024 -> 2 KB) सेट करना होगा।

+2

क्या यह थोड़ा खतरनाक नहीं है? यदि कार्यान्वयन कभी भी बदलता है, तो यह "\ r \ n \ n" उत्पन्न करेगा। –

+0

हम्म ... आप सही हैं! था मामले में, 'str = str.replaceAll ("\ r? \ N", "\ r \ n"); ' –

संबंधित मुद्दे