Java作为最开放的语言,已越来越受到网络程序员的青睐。但这一青睐族有着同样的经历——曾经都为网络上通信的Java数据格式而烦脑。
笔者也不例外,曾经为此而查阅了很多文档,经过反复测试才得以解决,如今笔者已经在所从事的很多电子政务项目中顺利的应用。今天笔者写此文,介绍用Java解析网络数据的三种特殊方法,希望对正在寻求这方面问题答案的读者有所帮助。
UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能:
java 代码
- byte [] b;
-
- String utf8_value;
-
- utf8_value = request.getParameter("NAME");
-
- b = utf8_value.getBytes("8859_1");
-
- String name = new String(b, "GB2312");
在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, int off, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,int off指定数组b的偏移地址,也就是数组b的起始下标,int len指定需要读取的长度,方法返回实际读取的字节数。刚学Java的朋友可能要说:先定义一个与流长度等长的字节数组,调用read方法,指定起始下标为0,指定读取长度与数组长度等长,不是一下子可以读出来了吗?说的没错,笔者曾经也试着这样读取数据,但后来发现在读取网络数据时很不安全,我们想想在网络上获取数据可能并没那么流畅,数据流的传送可能会断断续续,所以并不能保证一次就能读取全部数据,特别是在读取大容量数据时更是如此,所以我们必须在读取数据时检测实际读到的长度,如果没有读完已知长度的数据就应该再次读取,以此循环检测,直到实际读取的长度累加与已知的长度相等,下面的代码实现了这一功能:
java 代码
- ServletInputStream inStream = request.getInputStream();
-
- int size = request.getContentLength();
-
- byte[] buffer = new byte[size];
-
- byte[] in_b = new byte[size];
-
-
- int count = 0;
-
- int rbyte = 0;
-
- while (count < size) {
-
- rbyte = inStream.read(buffer);
-
- for(int i=0;i
- in_b[count + i] = buffer[i];
-
- }
-
- count += rbyte;
-
- }
在不知道流长度的情况下将输入流转换成字节数组 前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了JDK文档之后发现ByteArrayOutputStream有一个byte[] toByteArray()方法,该方法会自动创建一个字节数组,然后返回。于是就巧妙的用ByteArrayOutputStream来作中间过渡实现转换,其它处理跟上面所介绍已知长度的情况差不多。假设需要被转换的流已经放在inStream里了,我们可以用如下的代码实现这一功能:
java 代码
- ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
-
- byte[] buff = new byte[100];
-
- int rc = 0;
-
- while ((rc = inStream.read(buff, 0, 100)) > 0) {
-
- swapStream.write(buff, 0, rc);
-
- }
-
- byte[] in_b = swapStream.toByteArray();
上面介绍了三种比较实用的Java数据转换,有兴趣的朋友可通过nbDeveloper@hotmail.com与笔者取得联系,进一步交流其它有关XML应用、程序设计模式、J2EE开发以及UML等知识。
分享到:
相关推荐
#### 三、Java解析MHT文件的关键步骤 ##### 3.1 获取MHT文件内容 在Java中,首先需要读取MHT文件的全部内容到字符串中。这可以通过`InputStream`和`IOUtils`工具类来实现。 ```java String mhts = IOUtils....
在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和编写数据。JSON格式通常用于客户端与服务器之间的数据传输,因为它的结构清晰、易于理解。本教程将...
此jar包的实现可能包括了对字节流的逐字节读取,根据预定义的格式解析数据,然后将这些数据结构化为Java对象,最后将这些对象转换为csv格式的字符串。整个过程中,可能还涉及到了多线程或者异步处理,以提高大文件...
字节流是 java.io 中的基本流类型,用于处理二进制数据。字节流包括 InputStream 和 OutputStream 两种,前者用于输入,后者用于输出。 DataInputStream 和 DataOutputStream 是 java.io 中的高级字节流,提供了...
### Java XML 文件解析详解 #### 一、XML 文件解析概述 XML (Extensible Markup Language) 是一种用于标记数据的语言,它的设计目的是传输和存储数据。XML 的灵活性使其成为多种应用场景中的首选格式,尤其是在...
首先,我们要理解ASCII编码,它是一种最基本的字符编码,仅支持128个字符,包括英文字符、数字和一些特殊符号。ASCII编码是7位的,但为了兼容性,通常以8位字节的形式存储,即每个字符用1字节表示,最高位为0。 接...
Java解析PPT教案主要涉及Java中的输入/输出流(I/O Stream)概念,这是Java编程中非常基础且重要的部分。在Java中,流是数据传输的抽象表示,它将不同的输入源(如键盘、文件、网络)和输出目标(如显示器、文件、...
### Java 数据格式转换成 JSON 的全面解析 #### 一、JSON 概述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,最初由 Douglas Crockford 提出。它基于 JavaScript 的语法,但独立于任何编程语言...
在Java Socket网络五子棋中,需要定义一套简单的协议来封装和解析游戏数据。例如,每个消息可能包含以下字段:玩家ID、棋盘位置、操作类型(落子或请求结束)等。这些字段以特定格式编码(如JSON或自定义二进制格式...
在Java编程领域,处理Excel文件是一项常见的任务,特别是在数据导入导出、报表生成以及数据分析等场景。本篇文章将深入探讨如何使用开源库easypoi来实现Java中的Excel操作,包括Excel的导出和导入功能。 easypoi是...
在标题中提到的“doc文件转换docx文件”,涉及到了Microsoft Office的两种不同文件格式。DOC是早期的Word文档格式,而DOCX是Word 2007及以后版本引入的基于XML的新格式。转换过程需要解析DOC文件的内容,并将其重新...
1. **读取数据**:首先,从接收到的数据流中读取内容,这可能来自HTTP请求体或电子邮件的正文。 2. **寻找边界**:使用指定的boundary字符串在数据中查找分隔符。边界前后可能有换行符或者额外的空格,因此需要考虑...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在Java中,我们经常需要将JSON字符串与Java对象进行相互转换,以便于...
而对于需要高效处理大型文档或实时数据流的应用,则SAX会更有优势。最终,开发人员应该根据自己的项目需求来决定使用哪种解析方法。通过深入了解这些解析技术的特点和限制,可以更好地利用XML的强大功能,提高软件...
java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...
然而,在处理遗留的CVS项目时,理解CVS的工作原理和如何在Java中解析其数据仍然是必要的技能。 五、Java与Git集成 1. **JGit**:由Eclipse基金会维护的JGit是一个纯Java实现的Git库,可以方便地在Java项目中集成...
4. 处理特殊情况:如果需要更复杂的处理,比如保留某些标签的格式(如段落),可以使用`outerHtml()`方法结合正则表达式进行处理。例如,保留段落标签: ```java String cleanedText = doc.select("p").outerHtml()....
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。在Java中,处理JSON串解析通常涉及到两个主要的库:Jackson和Gson。这两个库都提供了简单易用的API来序列化和...
总结,通过Java实现Google Web Service请求,主要涉及到URL构建、网络请求和数据解析三个关键步骤。利用Google提供的Java客户端库可以简化这个过程,提高开发效率。不过,实际开发时还需要关注错误处理、权限验证、...
"火星坐标互转Java版"这个项目涉及到的就是一种特殊的坐标转换技术,主要用于解决在中国大陆地区地图定位的问题。由于历史原因,中国的地图数据通常采用的是“火星坐标系”,也称为GCJ-02坐标系,它与国际上广泛使用...