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在进行字符串处理时,不生成新的对象,在内存 ...
随机推荐
- redis学习(六)主从复制
主从复制:主机更新数据后,根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主.redis支持主从复制. 下面通过实例来讲解主从复制的四个模式: ...
- 数组去重js方式
var selectmap = new Array(); /(\x0f[^\x0f]+)\x0f[\s\S]*\1/.test("\x0f"+selectmap.join(&quo ...
- Java EE 学习(5):IDEA + maven + spring 搭建 web(1)
参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--1590 ...
- 80人环游世界(bzoj 2055)
Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个80人的团伙,也想来一次环游世界. ...
- 洛谷[P3622] 动物园
状压DP 发现本题中,每个小朋友是否高兴仅取决于其后五个动物的情况,我们可以用状压DP解决本题 首先已处理 num[i][s] 表示对于位置 i ,状态为 s 时有多少在 s 的同学满意 转移方程很好 ...
- linux服务器端口netstat
netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的 ...
- div两侧的boder断开 消失 奇怪
原文发布时间为:2009-11-06 -- 来源于本人的百度文章 [由搬家工具导入] 解决方法: 设定外层DIV的宽度即可,如 width:99% ========================== ...
- 使用vim修改和查看16进制文件
使用前的准备工作,如果没有安装,使用命令安装: pacman -S vim 使用vim的十六进制功能查看和编辑文本文件,创建测试文件,使用命令如下: vim test.txt 进入“插入”模式,使用命 ...
- Selenium2+python自动化(unittest)
# coding:utf-8from selenium import webdriverimport unittestimport timeclass Bolg(unittest.TestCase): ...
- 小记——关于Tilemap图块索引编码
图集 地图 TileMap 导出的 .Tmx 文件记录了地图所有信息,其中编辑好的图块信息会存放在每个图层的 Data 节点下.以下是一个 10x10 的图层,可以看到,Data 节点记录了每个图块对 ...