- 浏览: 2662694 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
在前面java socket那篇文章中我提到netty使用PushbackInputStream来解决IO阻塞的问题。今天遇到一个错误使用PushbackInputStream导致的小BUG,花费了一点时间,所以记录一下。我的代码:
这段代码能运行,但多次调用之后会出现数据丢失的问题,刚好第一个byte丢掉了。原因是我没有理解PushbackInputStream的用法。
new PushbackInputStream(socket.getInputStream(), 1);
这里面的1表示每次只读取一个字节。那么在具体读数据的时候:
int b = input.read();
if (b < 0) {
break;
}
input.unread(b);
continue;
b返回读到的数据,如果大于0表示有新数据进来了,那么我们通过unread返回给inpustream,然后continue。所以回到前面的代码,不应该在while循环里面new PushbackInputStream(),而应该放在while循环外面。
public void run() { Socket socket = this.socket; PushbackInputStream input = null; while (true) { try { input = new PushbackInputStream(socket.getInputStream(), 1); int bytesToRead = input.available(); byte[] buf; String buffer; int readBytes; if (bytesToRead > 0) { buf = new byte[bytesToRead]; readBytes = input.read(buf); } else { int b = input.read(); if (b < 0) { break; } input.unread(b); continue; } System.out.println(readBytes); System.out.println(buf.length); buffer = new String(buf); String result = t.test(buffer); OutputStream out = socket.getOutputStream(); out.write(("ok" + result + "\r\n").getBytes()); out.flush(); } catch (Exception e) { e.printStackTrace(); } } try { System.out.println("colse"); socket.close(); } catch (IOException e) { e.printStackTrace(); } }
这段代码能运行,但多次调用之后会出现数据丢失的问题,刚好第一个byte丢掉了。原因是我没有理解PushbackInputStream的用法。
new PushbackInputStream(socket.getInputStream(), 1);
这里面的1表示每次只读取一个字节。那么在具体读数据的时候:
int b = input.read();
if (b < 0) {
break;
}
input.unread(b);
continue;
b返回读到的数据,如果大于0表示有新数据进来了,那么我们通过unread返回给inpustream,然后continue。所以回到前面的代码,不应该在while循环里面new PushbackInputStream(),而应该放在while循环外面。
发表评论
-
Raft
2018-07-12 14:20 762前言 上篇文章说解决问题要分而治之,先把分片的问题解决了再 ... -
java uuid
2017-09-14 18:18 560在java中产生uuid的方式是使用java.util.UU ... -
JAVA 编码规范
2017-09-06 11:34 414https://google.github.io/style ... -
mac 入门
2015-12-01 16:28 626http://foocoder.com/blog/wo-zai ... -
TCP滑动窗口
2014-06-04 16:10 853目前建立在TCP协议上的网络协议特别多,有telnet,ss ... -
java 反编译工具gad
2014-05-09 12:04 977java 反编译工具gad,备个份。 -
java 代码大全(code book)
2014-04-29 10:59 1083参考这里: http://www.java2s.com/C ... -
IO流技巧总结
2014-03-25 11:33 6631. 一个比较少用的StringReader,处理换行字符串 ... -
SQL语法解析器JSQLParser
2014-02-09 19:53 2150SQL 语法解释器jsqlparser 是用java ... -
BufferedInputStream 深入研究。
2013-11-19 13:26 14271. BufferedInputStream的基本原理 ... -
TCP 滑动窗口协议
2013-11-07 18:36 5557TCP滑动窗口机制 我们可以大概看一下上图的模型 ... -
关于JAVA取本机ip的一些总结
2013-09-13 14:29 8233通常绑定本机ip地址 一般如下 I ... -
java 启动脚本
2013-08-22 19:08 982java 启动脚本 #!/bin/bash cmd=&q ... -
CRLF escape
2013-08-06 17:51 1199最近需要对用户输入的CRLF即(\r\n)做escape, ... -
网络编程中Nagle算法和Delayed ACK的测试
2013-07-28 22:44 952网络编程中Nagle算法和Delayed ACK的测试 -
安全的自增类
2013-07-22 18:16 991java中一个计数器如果超过MAX_VALUE再自增会如何? ... -
NFS-RPC框架优化过程(从37k到168k)
2013-07-18 22:17 1519NFS-RPC框架从编写之初,到现在为止(应该还会有些提升, ... -
Java程序员也应该知道的一些网络知识
2013-07-18 22:11 919对于需要编写网络通 ... -
深入理解JDBC的超时(timeout)设置
2013-06-26 15:27 6400真实案例:应用服务器在遭到DDos攻击后无法响应 在遭到 ... -
solr日志被block的问题
2013-05-23 16:48 1264"catalina-exec-22386" ...
相关推荐
在Java编程语言中,`PushbackInputStream`是一个用于处理输入流的类,它提供了一种回退(或称为退格)的功能。这个类是`java.io`包的一部分,主要用于在读取数据后允许将数据“推回”到流中,以便后续的读取操作可以...
5. SequenceInputStream:从两个或多个低级流中读取数据字节,当到达流的末尾时从一个流转到另一个流 6. System.in:从用户控制台读取数据字节 InputStream 还有一个子类:过滤器流 java.io.FilterInputStream。...
- **ByteArrayInputStream**:从一个字节数组创建一个输入流。 - **StringBufferInputStream**:从一个字符串创建一个输入流。 - **FileInputStream**:从一个文件创建一个输入流。 - **PipedInputStream**:...
Java I/O 流是Java平台中的一个重要组成部分,它在处理数据输入和输出方面扮演着核心角色。I/O流系统提供了一种标准化的方式来读取、写入数据,无论是从磁盘、网络、内存还是其他类型的输入输出设备。在这个思维导图...
首先,我们来看一个基本的例子,该例子展示了如何使用 `GZIPInputStream` 类来读取并解压 `.gz` 文件。下面的代码片段展示了这一过程: ```java try { // 打开压缩文件 String inFilename = "infile.gzip"; ...
PushbackInputStream PushbackInputStream 为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。 PushbackReader 允许将字符推回到流的字符流 reader。 RandomAccessFile 此类...
Java的I/O机制是基于流的,即数据以流的形式从一个地方传输到另一个地方。Java的I/O流分为两大类:字节流(Byte Stream)和字符流(Character Stream),并根据数据流向的不同,又可以分为输入流(InputStream和...
Java IO 支持文件锁定机制,通过`FileLock`类可以防止多个进程同时修改同一个文件,从而保证数据的一致性和完整性。 #### 六、后续可以探讨的问题 - 如何有效地处理大文件的读写操作? - 如何利用NIO的新特性来...
FilterInputStream作为一个抽象类,包含了另一个InputStream实例,这样就可以装饰已存在的流,增加新的功能。例如,BufferedInputStream可以提供缓冲能力,提高读取效率;DataInputStream支持读取基本数据类型;...
`PipedInputStream`和`PipedOutputStream`:用于线程间的通信,数据可以从一个线程的`PipedOutputStream`写入,另一个线程的`PipedInputStream`读取。 `SequenceInputStream`:允许将多个输入流连接在一起,如同一...
- **`FileInputStream`**:从一个文件创建输入流,用于读取文件中的数据。 - **`PipedInputStream`**:与 `PipedOutputStream` 配合使用,实现线程间的通信。 - **`SequenceInputStream`**:合并多个输入流为一个...
在Java编程中,UTF-8编码是一个非常常见且广泛使用的字符编码格式,它能支持全球大部分语言的字符表示。然而,UTF-8有一个特殊特性,那就是它可以带有Byte Order Mark(BOM),这是一个特殊的字节序列,用于标识数据...
- **`PushbackInputStream`**:允许将一个或几个读取的字节放回输入流中。 ##### 2. FilterOutputStream及其子类 - **`DataOutputStream`**:用于向`OutputStream`写入基本数据类型。 - **`BufferedOutputStream`*...
Java IO系统是Java编程中的一个重要组成部分,它负责处理程序与外部资源(如文件、网络等)之间的数据交换。Java IO的设计以流为基础,可以分为输入流(Input Stream)和输出流(Output Stream)两大类。 ##### 1.1...
- `PushbackInputStream`:允许将一个字节压回输入流。 - **字符流过滤器**: - `BufferedReader`:为字符流提供缓冲机制,提高读取效率。 - `LineNumberReader`:记录字符流中行号的位置。 - `PushbackReader`...
- **SequenceInputStream**:将多个输入流合并为一个输入流,可以连续读取多个输入流中的数据。 ##### 2. 输出流(OutputStream) - **ByteArrayOutputStream**:将数据写入内存中的字节数组。适合于需要缓存数据...
3. 组合框(combobox)在Java中是由JComboBox类表示,它继承自JComponent类,并且它是由JList类派生过来的,但组合框不允许选择多个元素,缺省时也不可编辑,因此正确答案是C)组合框只允许选择一个元素。...
Java IO(Input/Output)系统是Java平台中的一个重要组成部分,用于处理程序与外部设备之间的数据交换。Java IO系统提供了丰富的类来支持不同类型的输入输出操作,包括但不限于文件读写、网络通信等。本文将通过分析...
java IO 字节流练习代码 FileInputStream和FileOutputStream BufferedInputStream 和 BufferedOutputStream DataInputStream 和 DataOutputStream ObjectInputStream和ObjectOutputStream ...PushbackInputStream