public byte[] doConnNetWork(byte[] outputBytes) throws IOException {
byte[] result = null;
Socket connection = null;
OutputStream outputStream = null;
InputStream inputStream = null;
int c = 0;
boolean isGo = true; // 是否继续
// 只讲重点的,其他的忽略掉了
connection = openConnection();
inputStream = this.openConnectionInputStream(connection);
outputStream = this.openConnectionOutputStream(connection);
//*** 从服务器端接受数据 ***//
while (c < 3 && isGo) {
//--------------------------------------------- 读取数据核心代码 start ----------------------------------
int hLen = 18;
byte[] header = new byte[hLen];
inputStream.read(header, 0, hLen);
// 读取包头
ResponseHeader rheader = DataPackage.getResponseHeader(header);
int len = rheader.getDwDataLen();
REQUEST_TYPE = rheader.getRequestType();
// 解析header,得到数据长度len
byte[] content = new byte[len];
while (inputStream.available() < len) {
try {
Thread.sleep(10);
// System.out.println(" len --> " + len);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
inputStream.read(content, 0, len);
//int rLen =
//System.out.println(" len --> " + len + " read Len ->" + rLen);
if (len > 0) {
result = new byte[hLen + len];
System.arraycopy(header, 0, result, 0, hLen);
System.arraycopy(content, 0, result, hLen, len);
} else {
result = header;
}
//---------------------------------------------- 读取数据核心代码 end --------------------------------------
c++;
}
closeConnection(connection, outputStream, inputStream);
return result;
}
分享到:
相关推荐
- **读取(Read)**:通过`get()`或`load()`获取单个对象,`createQuery()`或`createNativeQuery()`执行HQL(Hibernate Query Language)或SQL查询来获取多个对象。 - **更新(Update)**:调用`update()`或`merge...
Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...
注意,Alluxio支持块级别的缓存,所以多次读取同一文件可能会更快。 4. **文件删除** 删除Alluxio中的文件可以使用`delete`方法,传入`AlluxioURI`对象表示的文件路径。如果文件被其他进程使用,可能需要设置强制...
Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...
本篇文章将深入探讨如何使用Java实现文件的发送和接收,主要围绕标题"java 传送文件"展开,结合提供的`server_demo`和`client_demo`文件,我们可以推断这是一个关于Java网络文件传输的示例。 首先,Java提供了...
Spring Batch 是一个强大的Java批处理框架,用于处理大量数据处理任务。它被广泛应用于企业级应用,尤其是...这个demo涵盖了从简单数据处理到复杂工作流设计的多个方面,是学习和理解Spring Batch框架的一个宝贵资源。
在TCP/IP协议中,长连接是指一次TCP连接建立后,不立即断开,而是保持一段时间,以便在同一连接上进行多次数据传输。相较于短连接,长连接减少了连接建立和关闭的开销,提高了通信效率。 在Java中,我们通常通过`...
通过分片读取和流式写入,EasyExcel能够避免一次性加载大量数据导致的内存溢出问题,极大地提高了处理大数据量时的系统稳定性。 EasyExcel提供了丰富的API接口,可以方便地实现Excel的读、写操作。在读取Excel时,...
注意,缓冲区可能需要多次写入和清空才能完成所有数据的传输。 文件复制是NIO的一个经典应用。在示例中,可能会有以下步骤: 1. 打开源文件和目标文件的FileChannel。 2. 创建一个足够大的ByteBuffer,用于数据...
- **权限申请**:首先,你需要在`AndroidManifest.xml`中声明读取外部存储的权限,即`<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />`。 - **选择文件**:Android提供了多种方式让...
不可重复读则是在同一事务中,两次读取同一数据,结果不同,因为其他事务修改了数据。幻读发生在查询过程中,事务前后两次相同查询结果数量不一致,原因是其他事务插入了新的符合查询条件的记录。 Spring通过`@...
3. Statement与PreparedStatement:Statement用于执行静态SQL语句,而PreparedStatement则支持预编译的SQL,更安全,性能更好,适合多次执行相同的SQL。 4. ResultSet处理:执行查询后,结果集(ResultSet)用于遍历...
IO,即Input(输入)和Output(输出),在Java中表现为数据流的形式,用于读取或写入各种数据源,如文件、网络连接等。Java的IO流体系结构复杂而强大,包括字节流和字符流两大类,以及许多子类,如缓冲流、转换流等...
这个DEMO展示了如何有效地读取那些在联系人信息中设置了电子邮件地址的联系人。下面我们将深入探讨实现这一功能所涉及的关键知识点。 1. **权限管理**: 在AndroidManifest.xml文件中,你需要添加读取联系人的权限...
HDFS的设计遵循“一次写入,多次读取”的原则,这意味着文件一旦创建,就不能修改,只能追加内容。 现在,我们将深入探讨如何使用Java API进行HDFS操作: 1. **连接HDFS**: 使用`Configuration`类初始化配置,设置...
【标题解析】:“md2_bufferread_demo2”这个标题很可能是指一个使用MD2(Message-Digest Algorithm 2)加密算法的Java程序示例,可能是关于读取和处理数据流的。MD2是一种早期的密码学哈希函数,常用于生成数据的...
总结来说,Android中的多线程异步断点续传技术涉及了文件操作、网络请求、线程同步等多个方面,理解并掌握这些知识对于提升应用性能和用户体验至关重要。通过上述示例和解释,开发者可以更好地理解和实现这一功能。
这个简单的播放器DEMO虽然功能有限,但它涵盖了移动设备音频播放的基本原理和技术,对于初学者来说是一次宝贵的学习经验。通过深入理解和实践这些知识点,开发者可以构建更复杂、功能更全的音乐播放应用。
- **实现**:Java中`ReentrantReadWriteLock`是ReadWriteLock的实现,它具有可重入性,即一个线程可以获取同一锁多次。 - **组成部分**:读写锁由两把锁组成:读锁(ReadLock)和写锁(WriteLock)。读锁可以被多...
为了确保网络环境的一致性,你可以在同一网络环境下多次运行该示例,以便准确评估下载速度。 通过Netroid框架和HttpURLConnection,我们可以高效地实现文件下载功能,同时监控下载速度。尽管HttpURLConnection需要...