Java 使用StringBuffer注意
package com.dafsdfsd.core.service; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.UnknownHostException; import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.junit.Test; import com.dafsdfsd.core.common.PorpertiesConfig;
import com.dafsdfsd.core.utils.StringUtils;
import com.dafsdfsd.core.utils.xml.XmlUtil4Jdom; public class SendMessageToCore {
private static Logger logger = Logger.getLogger(SendMessageToCore.class); /**
* 核心返回报文中状态代码节点
*/
public static final String MESSAGE_STATUS_CODE = "MessageStatusCode";
/**
* 核心返回报文中状态描述节点
*/
public static final String MESSAGE_STATUS_DESCRIPTION = "MessageStatusDescription";
/**
* 核心返回报文中表示成功的代码
*/
public static final String CORE_RETURN_CODE_SUCCESS = "0001"; /**
* 发送报文到核心系统<br><pre>
* 核心接收GBK编码的报文,在调用这个方法之前应该将报文转换为GBK的编码 <br>
* 创建时间:2013-5-30 下午04:21:15 </pre>
* @param message 发送到核心的报文
* @return String 核心返回的报文
* @throws 异常类型 说明
*/
public static String sendMessage(String message) throws Exception {
logger.info("收到的报文内容是:" + message); String coreAddress = PorpertiesConfig.getProperty("core.socketAddress");
String corePortString = PorpertiesConfig.getProperty("core.socketPort"); Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedWriter bout = new BufferedWriter(new FileWriter(new File("G:/test.txt")));
BufferedWriter bout1 = new BufferedWriter(new FileWriter(new File("G:/test1.txt")));
// 收到的报文
StringBuffer stringBuffer = new StringBuffer();
String receiveString = null;
if (coreAddress != null && corePortString != null) {
int corePort = Integer.parseInt(corePortString);
try {
socket = new Socket(coreAddress, corePort);
out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
out.println(message);
out.flush(); in = new BufferedReader(new InputStreamReader(socket.getInputStream(), XmlUtil4Jdom.GBK_ENCODING)); while ((message = in.readLine()) != null) {
// bout.write(message);
stringBuffer.append(message + "\n");
// stringBuffer.append(message);
} // BufferedReader流已指定编码输出,这里不需要再次转码了
// receiveString = new String(stringBuffer.toString().getBytes(XmlUtil4Jdom.GBK_ENCODING), XmlUtil4Jdom.GBK_ENCODING);
receiveString = stringBuffer.toString();
bout.write(receiveString); } catch (UnknownHostException e) {
logger.error("没有找到核心的服务器", e);
throw new Exception("没有找到核心的服务器", e);
} catch (IOException e) {
logger.error("与核心服务器通信出现异常", e);
throw new Exception("与核心服务器通信出现异常", e);
} finally {
if (out != null)
out.close();
if (in != null)
in.close();
if (bout != null)
bout.close();
}
} // receiveString = stringBuffer.toString();
// logger.info("核心返回的原始内容是:" + receiveString); String msgString = null;
if(null != receiveString && !receiveString.isEmpty()){ msgString = getXmlContent(receiveString); // int msgLength = Integer.parseInt(receiveString.substring(0, 6).trim()); // 前12位为报文长度和接口代码
// msgString = substring4CharArray(receiveString, 12, msgLength);
// msgString = receiveString.replaceFirst(msgLength, "");
// msgString = receiveString.substring(12);
// byte[] msg = msgString.getBytes(XmlUtil4Jdom.GBK_ENCODING);
//
// byte[] newMsg = new byte[msgLength];
// for (int i = 0; i < msgLength; i++) {
// newMsg[i] = msg[i];
// }
//
// msgString = new String(newMsg // logger.info("将核心返回的报文内容做编码转换及长度截取之后的结果:" + msgString);
logger.info("将核心返回的报文内容做编码转换及长度截取之后的结果:已处理");
} try {
bout1.write(msgString);
if (bout1 != null)
bout1.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Document doc = DocumentHelper.parseText(msgString);
return msgString;
} public static String getXmlContent(String src) {
// StringBuffer sb = new StringBuffer();
String rs = null;
try {
// byte[] byteArray = null;
// char[] charArray = null;
// byteArray = src.getBytes(XmlUtil4Jdom.GBK_ENCODING);
// charArray = src.toCharArray();
// System.out.println(src.length());
// System.out.println(charArray.length);
// System.out.println(byteArray.length);
// System.out.println(src.charAt(1));
// System.out.println(src.charAt(src.length() - 2));
// System.out.println(src.charAt(src.length() - 1)); // 获取代码内容
String srcCode = org.apache.commons.lang.StringUtils.substring(src, 0, 12);
System.out.println(srcCode); // 获取xml内容
rs = org.apache.commons.lang.StringUtils.substring(src, 12, src.lastIndexOf(">") + 1);
// return src;
// charArray = src.toCharArray();
// for (int i = 0; i < charArray.length; i++) {
// sb.append(charArray[i]);
// } // System.out.println();
// System.out.println();
// System.out.println();
// System.out.println(src.length());
// System.out.println(charArray.length);
// System.out.println(byteArray.length); //String
// for (int i = 0; i < src.length(); i++) {
//// sb.append(charArray[i]);
//// sb.append(src.charAt(i));
// char s = src.charAt(i);
//// System.out.println(s);
// sb.append(s);
// } //byte
// for (int i = 0; i < byteArray.length; i++) {
// sb.append((char)byteArray[i]);
// }
// return new String(byteArray, XmlUtil4Jdom.GBK_ENCODING); // System.out.println();
// System.out.println();
// System.out.println();
// System.out.println(src.charAt(src.length() - 3));
// System.out.println(src.charAt(src.length() - 2));
// System.out.println(src.charAt(src.length() - 1)); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
} @Test
public void test() {
StringBuffer buffer = new StringBuffer();
FileReader fr = null;
BufferedReader br = null;
try {
// fr = new FileReader("E:/workspace3/i-myproject/b_LOG/temp.xml");
fr = new FileReader("G:/workspace/i-myproject/temp.xml");
br = new BufferedReader(fr);
String content = br.readLine();
while (content != null) {
buffer.append(content);
content = br.readLine();
}
String msg = buffer.toString();
sendMessage(new String(msg.getBytes(), XmlUtil4Jdom.GBK_ENCODING));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
Java 使用StringBuffer注意的更多相关文章
- JAVA String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- Java String StringBuffer StringBuilder
String 字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer 字符串变量 线程安全 在堆上创建,每次追加操作在原对象上进行操作: 速度 StringBuffer ...
- 【转】JAVA的StringBuffer类
[转]JAVA的StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...
- Java源码学习 -- java.lang.StringBuilder,java.lang.StringBuffer,java.lang.AbstractStringBuilder
一直以来,都是看到网上说“ StringBuilder是线程不安全的,但运行效率高:StringBuffer 是线程安全的,但运行效率低”,然后默默记住:一个是线程安全.一个线程不安全,但对内在原因并 ...
- Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
java.lang 类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口: Serializable, Appendable, ...
- Java基础-StringBuffer类与StringBuilder类简介
Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...
- Java 中StringBuffer与StringBuilder区别(转)及String类的一些基本操作代码
String 字符串常量StringBuffer 字符串变量(线程安全) 多个线程访问时,不会产生问题(Synchronized)StringBuilder 字符串变量(非线程安全) 多个线程访问时 ...
- Java中StringBuffer类
StringBuffer: 线程安全的可变字符串. StringBuffer和String的区别?前者长度和内容可变,后者不可变.如果使用前者做字符串的拼接,不会浪费太多的资源. StringBuff ...
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- Java api 入门教程 之 JAVA的StringBuffer类
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...
随机推荐
- java读取文件的基本操作
import java.io.FileInputStream; /** * 使用FileInputStream读取文件 */ public class FileRead { /** * @param ...
- POJ 3090
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8397 Accepted: ...
- 网页制作教程:td也可以溢出隐藏显示【转】
原文发布时间为:2010-02-05 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stri ...
- win8.1 uefi引导
装上win8后,感觉似乎开机比win7要慢一些,但实际掐表又发现几乎无差别,但是看网上别人都说 win8可以10秒以内开机,然后又说他们是采用uefi引导,而不是bios引导,那我也试试吧,如下: 1 ...
- 修复受损的linux引导
想来楼主玩linux差不多近20年了,从redhat,mandrke,manjaro,汉化,听歌.看电视电影.上网.打游戏.配置打印机等,碰到的问题一一解决了,但是一直对装好linux后重新安装win ...
- c# automapper 使用
一.最简单的用法 有两个类User和UserDto 1 public class User 2 { 3 public int Id { get; set; } 4 public string Name ...
- Bitmap类
一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...
- 前端优化 -- Combo Handler
Combo Handler来合并CSS/JS文件 背景 Combo Handler是Yahoo!开发的一个Apache模块,它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件, ...
- 【原创】Javascript-显示系统时间
/*JS-显示系统时间*/ function showLocale(objD) { var str, colorhead, colorfoot; var yy = objD.getYear(); if ...
- 转:如何将 Java 项目转换成 Maven 项目
如何将 Java 项目转换成 Maven 项目 本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明 ...