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在进行字符串处理时,不生成新的对象,在内存 ...
随机推荐
- Python数据结构之列表
1.Python列表是Python内置的数据结构对象之一,相当于数组 2.列表用[] 包含,内有任意的数据对象,每一个数据对象以 ,逗号分隔,每隔数据对象称之为元素 3.Python列表是一个有序的序 ...
- react 基础语法复习3- 数据传递 & 数据变化(props&&state)
react当中的数据传递是通过 props以及 state来实现的 props <Header name="kugeliu" /> Header组件当中有个name属性 ...
- cf 542E - Playing on Graph
cf 542E - Playing on Graph 题目大意 给定一个\(n\le 1000\)个点的图 求经过一系列收缩操作后能否得到一条链,以及能得到的最长链是多长 收缩操作: 选择两个不直接相 ...
- 标准IO与文件IO 的区别
先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性.标准IO库处理很多细节.例如缓存 ...
- set基本用法---1
#include<cstdio> #include<iostream> #include<cstdlib> #include<cmath> #inclu ...
- AC日记——食物链 codevs 1047
1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 动物王国中有 ...
- Codeforces Gym100814 F.Geometry (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
这个题真的是超级超级水啊,哈哈哈哈哈哈.不要被题面吓到,emnnn,就这样... 代码: 1 #include<iostream> 2 #include<cstring> 3 ...
- Codeforces Round #466 (Div. 2) B. Our Tanya is Crying Out Loud[将n变为1,有两种方式,求最小花费/贪心]
B. Our Tanya is Crying Out Loud time limit per test 1 second memory limit per test 256 megabytes inp ...
- 第十二届北航程序设计竞赛决赛网络同步赛 J题 两点之间
题目链接 Problem J 这道题思路还是很直观的,但是有两个难点: 1.题目中说$1<=NM<=10^{6}$,但没具体说明$N$和$M$的值,也就是可能出现: $N = 1, M ...
- HDU - 2970 Suffix reconstruction
Discription Given a text s[1..n] of length n, we create its suffix array by taking all its suffixes: ...