类:NetUtils.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
public class NetUtils
{
public static final String CHARACTER_ENCODING = "UTF-8";
public static final String PATH_SIGN = "/";
public static final String METHOD_POST = "POST";
public static final String METHOD_GET = "GET";
public static final String CONTENT_TYPE = "Content-Type";
/**
* 以POST方式向指定地址发送数据包请求,并取得返回的数据包
*
* @param urlString
* @param requestData
* @return 返回数据包
* @throws Exception
*/
public static byte[] requestPost(String urlString, byte[] requestData)
throws Exception
{
Properties requestProperties = new Properties();
requestProperties.setProperty(CONTENT_TYPE,
"application/octet-stream; charset=utf-8");
return requestPost(urlString, requestData, requestProperties);
}
/**
* 以POST方式向指定地址发送数据包请求,并取得返回的数据包
*
* @param urlString
* @param requestData
* @param requestProperties
* @return 返回数据包
* @throws Exception
*/
public static byte[] requestPost(String urlString, byte[] requestData,
Properties requestProperties) throws Exception
{
byte[] responseData = null;
HttpURLConnection con = null;
try {
URL url = new URL(urlString);
con = (HttpURLConnection) url.openConnection();
//设置请求属性
if ((requestProperties != null) && (requestProperties.size() > 0))
{
for (Map.Entry<Object, Object> entry : requestProperties.entrySet())
{
String key = String.valueOf(entry.getKey());
String value = String.valueOf(entry.getValue());
con.setRequestProperty(key, value);
}
}
con.setRequestMethod(METHOD_POST); // 置为POST方法
con.setDoInput(true); // 开启输入流
con.setDoOutput(true); // 开启输出流
// 如果请求数据不为空,输出该数据。
if (requestData != null)
{
DataOutputStream dos = new DataOutputStream(con.getOutputStream());
dos.write(requestData);
dos.flush();
dos.close();
}
int length = con.getContentLength();
// 如果回复消息长度不为-1,读取该消息。
if (length != -1)
{
DataInputStream dis = new DataInputStream(con.getInputStream());
responseData = new byte[length];
dis.readFully(responseData);
dis.close();
}
}
catch (Exception e)
{
throw e;
}
finally
{
if (con != null)
{
con.disconnect();
con = null;
}
}
return responseData;
}
}
分享到:
相关推荐
总之,Java模拟线程并发是一个广泛且深入的话题,涵盖了线程的创建、同步、管理和高级并发工具的使用。理解和熟练应用这些知识,能够帮助开发者编写出高效、安全的多线程程序。在实际开发中,应根据具体需求选择合适...
这篇博文将探讨如何在Java中实现高并发隔离,并通过模拟来理解其工作原理。 首先,我们要了解并发隔离的几种主要机制: 1. **线程局部存储(ThreadLocal)**:Java中的`ThreadLocal`类提供了一种线程安全的方式,...
这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...
本项目提供了一个用Java语言实现的HTTP并发访问模拟工具,名为HttpClient。 HttpClient是一个流行的Java库,由Apache软件基金会维护,它允许开发者创建复杂的HTTP客户端应用。这个库提供了丰富的功能,包括但不限于...
高并发模拟多个用户同时访问所写接口,用于测试接口所需要的的并发,和接口的最多承受用户量,适用于一些简单的压力测试。
`ThreadTest`可能就是这样一个测试类,它可能包含了各种并发场景的模拟,比如线程间的协作、竞争条件的测试,或者对并发集合如`ConcurrentHashMap`、`CopyOnWriteArrayList`的性能测试。 总之,通过学习和实践这些...
本项目"java多线程模拟处理银行的实时转账交易"旨在通过多线程技术来模拟实现这一过程,确保程序的可扩展性和高效率。 首先,我们需要理解多线程的基本概念。线程是操作系统分配CPU时间片的基本单位,一个进程中...
在Java模拟操作系统中,可能需要抽象出设备类,为不同类型的设备提供通用的接口,同时处理设备的独占性和并发访问问题。 5. **时钟功能**: 时钟是操作系统中用于计时和触发事件的关键组件。模拟时钟可能需要实现...
在一个单处理器系统中,由于处理器一次只能执行一个指令,因此并发实际上是通过任务间的快速切换来模拟“同时执行”的效果。 - **应用场景**:在办公室中,如果有多个员工需要使用同一台打印机,那么打印机在同一...
5. **并发控制**:在多用户环境下,为了保证数据的一致性和完整性,可能需要使用synchronized关键字或java.util.concurrent包中的工具来实现线程安全的并发访问。 6. **用户界面**:系统通常会包含一个用户界面,...
我们还需要用到同步机制,如synchronized关键字和Lock接口,以避免并发访问资源时出现的数据不一致问题。 数据库连接是项目的关键部分。Java通过JDBC(Java Database Connectivity)提供了一种标准的方式来访问各种...
在并发编程中,PV操作(即信号量Semaphore)是由荷兰计算机科学家Edsger Dijkstra提出的,它通过控制对共享资源的访问来避免竞态条件,确保线程间的同步。在Java中,我们可以使用内置的`java.util.concurrent`包中的...
根据提供的文件信息,“JAVA并发编程实践 中文 高清 带书签 完整版 Doug Lea .pdf”,我们可以推断出这份文档主要聚焦于Java并发编程的技术实践与理论探讨。下面将从多个角度来解析这个文档可能涵盖的关键知识点。 ...
Java是一种广泛使用的编程语言,可以用来实现CSMA/CD协议的模拟。在这个项目中,我们将探讨如何使用Java来模拟CSMA/CD的工作原理。 首先,我们需要理解CSMA/CD的基本概念。CSMA/CD的工作机制是“载波监听”和“冲突...
Java的synchronized关键字和Lock接口可用于控制并发访问,防止数据竞争。 8. **单元测试**:为了确保代码的正确性,通常会编写JUnit测试用例,对各个类的方法进行测试,包括边界条件和异常情况。 9. **GUI界面**:...
11. **并发测试**:书中可能会介绍如何编写测试用例来检查并发程序的正确性,如使用`Thread.sleep()`模拟延迟,或者使用`Thread.yield()`让其他线程有机会执行。 以上只是并发编程的一部分关键知识点,高洪岩先生的...
《Java并发编程英文版》是Doug Lea所著的一部关于Java并发编程的经典作品。Doug Lea是计算机科学领域的知名学者,尤其在并发编程、设计模式、软件工程等领域有深入的研究和独到的见解。本书在1996年首次出版,至今仍...
- **介质类**:模拟物理传输介质,处理多个设备的并发访问,提供监听和发送数据的方法。 - **冲突检测算法**:用于检测数据传输过程中的冲突,并执行退避算法。 编写Java代码时,你可以使用多线程来模拟多个并发的...
在Java编程中,多线程买票问题是演示并发控制的经典示例。这个问题旨在展示如何在多个线程共享同一资源(如票库存)时确保数据的一致性和正确性。以下是三种不同方法来解决这个问题: 1. **使用`synchronized`...
Java提供了`synchronized`关键字和`java.util.concurrent`包下的工具类来保证并发访问的安全性。 6. **异常处理**:在处理队列操作时,可能会遇到空队列时尝试删除元素等异常情况。项目应包含适当的异常处理机制,...