read

【PHP】自定义保存Session数据

时光总嘲笑我的痴心妄想 提交于 2019-11-29 03:51:35
简介: 在PHP开发偶尔会遇到需要保存Session数据到数据库的要求,大多也是为了实现Session共享,自己简单的实践了PHP的自定义保存Session功能,用起来还是非常方便。 原型: 1.session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool 2.session_set_save_handler ( object $sessionhandler [, bool $register_shutdown = TRUE ] ) : bool 实践: 1.调用session_start()之后,就会执行open → read → write → close 2.write是PHP脚本执行完毕之后调用的,就是保存当前Session的数据 3.read就是相当于恢复Session数据,一次性读入到$_SESSION变量中 实例: class FileSessionHandler { private

关于inputStream.read()返回值的问题

做~自己de王妃 提交于 2019-11-29 03:26:09
一.为什么intputStream.read()返回int   inputStream.read()的返回值是一个int,但它每次读取一个字节,原因是因为C++有无符号byte,那么它的范围就是【0-255】,但java没有无符号byte   所以Java的byte就是【-128-127】,如果用byte来接收那就会有一些数字会被表示为负数,所以就用int来接收。 二.为什么intputStream.read(byte[])却可以用byte   因为其实byte的本质还是字节码,保存了原始的二进制数据,只不过是打印出来后调用了toString()方法所以变成了十进制数字,下面是对toString()方法的   专业解释。只要不用打印用byte是没问题的,所以可以用byte数组来接收 java.lang.Byte.toString() 返回一个代表此字节的String对象的值。该值被转换为符号的十进制表示法,并以字符串形式返回,完全一样,如果字节值被赋予作为参数传递给了 toString(byte) 方法。原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/java/lang/byte_tostring.html 来源: https://www.cnblogs.com/lollong/p/11443092.html

NIO中SocketChannel read()返回0的原因

点点圈 提交于 2019-11-29 01:35:52
转载地址http://blog.csdn.net/cao478208248/article/details/41648359 当socketChannel为阻塞方式时(默认就是阻塞方式)read函数,不会返回0,阻塞方式的socketChannel,若没有数据可读,或者缓冲区满了,就会阻塞,直到满足读的条件,所以一般阻塞方式的read是比较简单的,不过阻塞方式的socketChannel的问题也是显而易见的。这里我结合基于NIO 写ftp服务器调试过程中碰到的问题, 总结一下非阻塞场景下的read碰到的问题 。注意:这里的场景都是基于客户端以阻塞socket的方式发送数据。 1、read什么时候返回-1 read返回-1说明 客户端的数据发送完毕,并且主动的close socket 。所以在这种场景下,(服务器程序)你需要关闭socketChannel并且取消key,最好是退出当前函数。注意,这个时候服务端要是继续使用该socketChannel进行读操作的话,就会抛出“ 远程主机强迫关闭一个现有的连接 ”的IO异常。 2、read什么时候返回0 其实read返回0有3种情况,一是某一时刻socketChannel中当前(注意是当前)没有数据可以读,这时会返回0,其次是bytebuffer的position等于limit了,即bytebuffer的remaining等于0

socket inputstream read bug

試著忘記壹切 提交于 2019-11-28 21:46:34
我们在写输入输出流中经常是以循环读取到-1作为结束符。 这个在文件的读写中,是没有问题的,很显然文件有结束符。 这个在socket通讯中,是有问题的,socket.getInputStream().read(buffer)这个函数,会处于阻塞状态,继续等待对方发数据过来。显然不可能中断,即使发一个-1,read也会把-1当作一个值读出来,循环仍将继续。 网上有一个解决方法:利用socket.setSoTimeout(),在第一次读取数据后,超过指定的时间,将发生异常,这时候,捕获异常,使程序继续进行。 我一个同事这样处理:利用inputStream.available(),来判断inputStream中是否还有可读取的值,如果没有,则跳出循环。 这两种做法都有弊端。 第一种做法,本生逻辑上就不合正常的思维,一般来说,我们是要避免抛异常的,这样做会使得程序写起来很别扭,理解起来也相对困难。另外,我们一般是通过传InputStream作为参数的,如private byte[] getEncodedData(InputStream is),这个时候,就必须传sokcet作为参数,不合逻辑。其它的就不再说了。 第二种做法:根据jdk提供的文档,Note that while some implementations of InputStream will return the total

Java Socket Timeout总结

跟風遠走 提交于 2019-11-28 21:46:02
1. Socket timeout Java socket有如下两种timeout: 建立连接timeout,暂时就叫 connect timeout; 读取数据timeout,暂时就叫so timeout。 1.1 建立连接connect timeout 当不设置该参数时,指客户端请求和服务端建立tcp连接时,会一直阻塞直到连接建立成功,或抛异常。当设置了connectTimeout, 客户端请求和服务端建立连接时,阻塞时间超过connectTimeout时,就会抛出异常java.net.ConnectException: Connection timed out: connect。 我们看如下精简后的代码,首先是服务端: serverSocket = new ServerSocket(8080); Socket socket = serverSocket.accept(); 服务端开启ServerSocket监听8080端口,再看客户端: socket = new Socket(); socket.connect(new InetSocketAddress("localhost", 8080)); System.out.println("Connected."); 打印“Connected.”,修改客户端代码中的主机名为一个不存在的主机: socket = new Socket

[PHP] 自定义保存Session数据

六眼飞鱼酱① 提交于 2019-11-28 21:41:28
简介: Android开发中需要处理Session的场景自己还是毕竟少见,就是有一次项目的后端竟然要保持Session,因为他们登陆接口不返回Token之类的身份识别字串,真的是坑啊! 其实了解了解后端的基础知识,例如Session的概念,对应安卓开发也是大有裨益的。如果能了解后端基础知识,这样就更好的和后端开发人员进行沟通。 在PHP开发偶尔会遇到需要保存Session数据到数据库的要求,大多也是为了实现Session共享,自己简单的实践了PHP的自定义保存Session功能,用起来还是非常方便。 原型: 1.session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool 2.session_set_save_handler ( object $sessionhandler [, bool $register_shutdown = TRUE ] ) : bool 实践: 1.调用session_start

~~Python文件简单操作~~

让人想犯罪 __ 提交于 2019-11-28 19:30:42
进击のpython Python文件操作 在说Python的文件操作之前 我们可以先思考一个问题 平时我们是怎么对电脑中的文件进行操作的呢? 打开电脑⇨找到文件⇨打开文件⇨读文件⇨修改文件⇨保存文件⇨关闭文件 对吧,这就是我们打开文件的基本流程 而 Python 打开文件的方式,也是这样的 打开电脑 ⇨ f=open(filename) ⇨ f.read() ⇨ f.write() ⇨ f.close() f = open(filename):打开文件 f.read():读文件 f.write():写文件 f.close():保存并关闭 文件打开模式 这个概念可能会很陌生 在word中,打开文件之后 就可以对文件进行 读,写,修改等操作 但是在python中,只能以一种模式操作文件 需要确定文件打开模式,才能够进行相应操作 r read 读模式 w write 创建模式 ==如果硬盘里有相同名字的文件,就覆盖掉== a append 追加模式 创建文件 f = open("123.txt", mode="w") f.write("dajiahao woshipeiqi\n") f.write("zheshiwodemama\n") f.write("zheshiwodebaba\n") f.close() 没什么说的,很简单 读取模式 f = open("123.txt",

read与for循环语句

半腔热情 提交于 2019-11-28 19:17:03
交互输入与for语句 1、交互输入 read Python中用input()函数,进行输入; read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中; 如果默认值过多,最后所有的值都会被赋予给最后一个变量; 如果默认值过少,多余的变量则为空值; 示例: read a b c aa bb cc read如何输入: echo "请输入一个目录:" 我们需要 echo -n 取消换行符号 echo "请输入一个目录:";read 变量 请输入一个目录:\etc 常用参数: -p read -p "请输入一个目录:" 变量 -t 定义超时时间 read -t 5 -p "请输入一个目录:" 变量 脚本默认值 [ ! -n $filename ] && filename="zhangjie" 输入内容------------------------------------------- | | 输入是否正确---------- 没有输入------------------------------ | | | | 正确 不正确,给提示 提示必须输入 给出默认值 练习:输入一个设备文件,输出这个设备文件的基本信息; #!/bin/bash # read -t 5 -p "输入一个设备文件名:" devname [ -z $devname ] && fdisk

Netty5_内存管理_源码讲解

佐手、 提交于 2019-11-28 15:55:14
欢迎大家关注我的微博 http://weibo.com/hotbain 会将发布的开源项目技术贴通过微博通知大家,希望大家能够互勉共进!谢谢!也很希望能够得到大家对我博文的反馈,写出更高质量的文章!! read事件发生,Netty需要从内核中读取数据到自己内部可以管辖的缓冲区,怎么进行分配?使用完毕后,怎么释放?已经write方法调用,怎样将相应数据进行缓冲区分配,以及write事件发生,flush完成后,怎样将缓冲区释放? read内存分配 要知道read是怎样进行进行内存分配的首先要知道是什么进行分配的,分配完之后,怎么进行内存回收?每次分配新的ByteBuf大小是多少? 分配内存:假设是初次进行分配(同一个socket多次进行分配的情况,后面会讲到.),我们看一下是什么时候进行分配的.上代码: int byteBufCapacity = allocHandle.guess(); int totalReadAmount = 0; do { //可能是 direct或者 heap 从与当前socket相关的allocator得到byteBuf数组 // byteBuf =allocHandle.allocate(allocator); byteBuf = allocator.ioBuffer(byteBufCapacity); int writable = byteBuf

python 文件操作

蓝咒 提交于 2019-11-28 15:34:34
文件常用IO操作 open 打开 read 读取 write 写入 close 关闭 readline 行读取 readlines 多行读取 seek 文件指针操作 tell 指针位置 打开操作 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 打开一个文件,返回一个文件对象(流对象)和文件描述符。开发文件失败,则返回异常 基本使用:创建一个文件,然后打开它,用完关闭 f = open("data.txt") print(f.read()) f.close() 文件操作中,最常用的操作就是读和写。文件访问的模式有两种:文本模式和二进制模式,不同模式下,操作函数不尽相同,表现的结果也不一样。 open的参数 file 打开或者要创建的文件名,如果不指定路径,默认是当前路径 mode模式 描述字符 意义 r 缺省的,表示只读打开 w 只写打开 x 创建并写入一个新文件 a 写入打开,如果文件存在,则追加 b 二进制模式 t 缺省的,文本模式 + 读写打开一个文件,给原来只读,只写方式打开提供缺失的读或者写能力 # r模式 f = open('test') # 只读还是只写? f.read() f.write('abc')