readline

C# 如何实现完整的INI文件读写类

岁酱吖の 提交于 2020-04-17 15:14:21
【推荐阅读】微服务还能火多久?>>> 作者 : 魔法软糖 日期 : 2020-02-27 引言 ************************************* .ini 文件是Initialization File的缩写,即配置文件 。 是 windows 的系统 配置文件 所采用的存储格式。 它具有方便易用的特点,和注册表的键值有着类似的功能, 各类应用程序也经常使用INI保存各种配置和选项。 在简单只需要读取的场合,调用WINDOWS API就行, 但在复杂的需要可视化编辑时,就需要建立自己的处理类了。 如何实现自己的INI类 首先我们需要了解 ◇ INI的格式 ◇ 典型INI文件 ;项目注释 [.ShellClassInfo] InfoTip=有图标的文件夹 ;图标资源 IconResource="C:\Windows\system32\SHELL32.dll",4 #文件夹视图 [ViewState] Mode= Vid= FolderType=General #尾部注释 一个典型INI文件由节、注释和节下面的项组成,而项为键=值的形式。 INI文件的注释符号有两种,规范为;分号,实际有些地方用#井号。 ◇ 保留注释 为了在修改INI文件时不丢失任何信息,所以需要保存INI文件中所有有效元素、包括注释甚至是无效行。 为了实现这个目的

Android大文件上传秒传之实战篇

你说的曾经没有我的故事 提交于 2020-04-15 13:58:03
【推荐阅读】微服务还能火多久?>>> picture.png 源码传送门 在上一篇文章我们介绍了获取大文件的一个唯一的特征值MD5,通过MD5我们可以唯一的标识一个文件,并可以实现秒传效果,今天的这篇文章主要介绍大文件的上传操作,当然谈到上传文件,网络是必不可少的,现在也有很多较为流行的网络框架,如 volley , OkHttp , Retrofit 。而今天的这篇文章是采用最原始的上传文件的方法,通过HttpClient上传文件的方式。 HttpClient API 在API 23(6.0系统)之前,HttpClient类是Android API中本身自带的方法,但是在23及以后的版本中谷歌放弃了HttpClient,如果想要使用需要在gradle文件中加上下面代码 android { useLibrary 'org.apache.http.legacy' } 加入上面的代码后,我们build一下就可以API23及以后版本中可以继续使用HttpClient,在使用HttpClient上传文件时可以使用MultipartEntity,FileBody,要使用这个类对象的话,我们需要导入相关jar包,在此我使用的是httpmine-4.1.3.jar。可能有些人说了,为何废弃了,还要用,不要问为什么,因为我也不知道,哈哈,其实是懒,主要是公司老项目用的是这个,还没准备大动

C# Encoding

前提是你 提交于 2020-04-15 08:04:41
【推荐阅读】微服务还能火多久?>>> 之前做公司项目的时候,对于C#编码这块总是一知半解,所以打算通过这篇笔记对C#编码(Encoding)进行彻底的扫盲,关于编码和字符集的基础知识,请参考 字符集和字符编码(Charset & Encoding) ,看完这篇文章之后,来看本文会更加的轻松。 1、Encoding (1)、如何生成一个Encoding即一种编码 Encoding位于System.Text命名空间下,是一个抽象类,它的派生类如下图: 要实例化一个Encoding一共有以下两种方式: a、通过实例化它的派生类,然后通过里式转换实例化一个Encoding,代码如下: Encoding e= new UTF8Encoding(); b、通过Encoding的静态属性ASCII,Unicode,UTF32,UTF7,UTF8,Default来生成,代码如下: Encoding e = Encoding.UTF8; 其实b中的静态属性无非是new了一个a中的派生类,有图为证 注:上面通过静态属性生成的Encoding实例,符合单例模式,但是并不适用在多线程环境下,所以当你的Encoding需要全局唯一时,请使用静态属性的方式,而不是通过new的方式。 (2)Encoding.Default 注意(1)中b,Encoding的静态属性中有一个Default,它没有对应的派生类

Java NIO:IO与NIO的区别 -阿里

梦想与她 提交于 2020-04-14 19:24:02
【推荐阅读】微服务还能火多久?>>> 一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。 二、NIO和IO的主要区别 下表总结了Java IO和NIO之间的主要区别: IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 1、面向流与面向缓冲 Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。 2、阻塞与非阻塞IO Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入

Web上传大文件的三种解决方案

为君一笑 提交于 2020-04-12 18:31:10
第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname = null; String fileAddre = "/numUp"; try { InputStream stream = file.getInputStream();// 把文件读入 String filePath = request.getRealPath(fileAddre);//取系统当前路径 File file1 = new File(filePath);//添加了自动创建目录的功能 ((File)file1).mkdir(); newfileName = System.currentTimeMillis() + file.getFileName().substring( file.getFileName().lastIndexOf('.')); ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream bos = new FileOutputStream(filePath + "/" + newfileName); newpathname = filePath + "/" +

C#队列学习笔记:RabbitMQ延迟队列

半城伤御伤魂 提交于 2020-04-12 17:15:18
一、引言 日常生活中,很多的APP都有延迟队列的影子。比如在手机淘宝上,经常遇到APP派发的限时消费红包,一般有几个小时或24小时不等。假如在红包倒计时的过程中,没有消费掉红包的话,红包会自动失效。假如上述行为使用RabbitMQ延时队列来理解的话,就是在你收到限时消费红包的时候,手机淘宝会自动发一条延时消息到队列中以供消费。在规定时间内,则可正常消费,否则依TTL自动失效。 在RabbitMQ中,有两种方式来实现延时队列:一种是基于队列方式,另外一种是基于消息方式。 二、示例 2.1、发送端(生产端) 新建一个控制台项目Send,并添加一个类RabbitMQConfig。 class RabbitMQConfig { public static string Host { get ; set ; } public static string VirtualHost { get ; set ; } public static string UserName { get ; set ; } public static string Password { get ; set ; } public static int Port { get ; set ; } static RabbitMQConfig() { Host = " 192.168.2.242 " ; VirtualHost

运用python实现提取文章title重命名

混江龙づ霸主 提交于 2020-04-12 13:36:12
最近整理文章,发现以前的post都是随便命名的如图: 这不行啊,既不美观又不方便,所以我决定要将文件夹重命名。 第一步:批量简易重命名 因为我发现文件的命名毫无章法,所以第一步先全选然后F2,就可以一键改名了 然后按一下enter: 当然这样的文件还不能满足我们。 我们新建一个xlsx,然后根据命名规则输入到A1里,然后点住右下角往下拖就好,然后将你想要命名的文件名输入到B里。 第二步:提取文件名 如果只是想简易命名的同学可以跳过这一步直接看第三步,这一步是针对文章里有你想要的文件名/title想要将其提取出来的同学准备的。 我的post内容如图所示: 第二行就是title,可以不用遍历正则化了,如果你的title不固定的话可以采用findall函数的正则化匹配查找然后提取,在这里我就不多提了。 提取文件名代码如下: import os import io import re #encoding:utf-8 file_dir = 'E://sd//blog//1' #文件目录(注意反斜杠要打两个) d=[] #新建一个列表存储title def titlere(file): with io.open(os.path.join(file_dir, file), "r", encoding="utf-8", errors='ignore') as f: f.readline()

手动搭建I/O网络通信框架2:BIO编程模型实现群聊

我是研究僧i 提交于 2020-04-12 12:11:34
第一章: 手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊    在第一章中运用Socket和ServerSocket简单的实现了网络通信。这一章,利用BIO编程模型进行升级改造,实现群聊聊天室。       如图:当一个客户端请求进来时,接收器会为这个客户端分配一个工作线程,这个工作线程专职处理客户端的操作。在上一章中,服务器接收到客户端请求后就跑去专门服务这个客户端了,所以当其他请求进来时,是处理不到的。   看到这个图,很容易就会想到线程池,BIO是一个相对简单的模型,实现它的关键之处也在于线程池。   在上代码之前,先大概说清楚每个类的作用,以免弄混淆。更详细的说明,都写在注释当中。    服务器端:   ChatServer:这个类的作用就像图中的Acceptor。它有两个比较关键的全局变量,一个就是存储在线用户信息的Map,一个就是线程池。这个类会监听端口,接收客户端的请求,然后为客户端分配工作线程。还会提供一些常用的工具方法给每个工作线程调用,比如:发送消息、添加在线用户等。   ChatHandler:这个类就是工作线程的类。在这个项目中,它的工作很简单:把接收到的消息转发给其他客户端,当然还有一些小功能,比如添加\移除在线用户。    客户端:   相较于服务器,客户端的改动较小,主要是把等待用户输入信息这个功能分到其他线程做

C#队列学习笔记:MSMQ入门二

感情迁移 提交于 2020-04-12 09:02:25
原文: C#队列学习笔记:MSMQ入门二 一、引言 按照专用队列解释: MachineName\Private$\QueueName,只针对于本机的程序才可以调用的队列,有些情况下为了安全起见定义为私有队列。所以刚开始的时候认为,要想访问远程消息队列,只能使用公共队列。但是后来发现,公共队列依赖Domain Controller(域控),在实际部署的时候,要求使用消息队列的应用一定要在某个域中,有些太苛刻!后来发现,私有队列也是可以远程访问的。(很困惑为什么私有队列只能本地访问,这句话,到处都能看到?!) 二、工作组下的本地C/S 2.1、项目建立 新建4个项目: 2.2、项目代码 2.2.1、Model项目 /// <summary> /// 消息队列实体 /// </summary> [Serializable] public class MqMessage { /// <summary> /// 对应Message的Label /// </summary> public string Label { get ; set ; } /// <summary> /// 对应Message的Body,CommandType为操作类型,List <string> 为操作列表。 /// </summary> public Dictionary<CommandType, List<

C#队列学习笔记:RabbitMQ延迟队列

[亡魂溺海] 提交于 2020-04-12 09:00:15
原文: C#队列学习笔记:RabbitMQ延迟队列 一、引言 日常生活中,很多的APP都有延迟队列的影子。比如在手机淘宝上,经常遇到APP派发的限时消费红包,一般有几个小时或24小时不等。假如在红包倒计时的过程中,没有消费掉红包的话,红包会自动失效。假如上述行为使用RabbitMQ延时队列来理解的话,就是在你收到限时消费红包的时候,手机淘宝会自动发一条延时消息到队列中以供消费。在规定时间内,则可正常消费,否则依TTL自动失效。 在RabbitMQ中,有两种方式来实现延时队列:一种是基于队列方式,另外一种是基于消息方式。 二、示例 2.1、发送端(生产端) 新建一个控制台项目Send,并添加一个类RabbitMQConfig。 class RabbitMQConfig { public static string Host { get ; set ; } public static string VirtualHost { get ; set ; } public static string UserName { get ; set ; } public static string Password { get ; set ; } public static int Port { get ; set ; } static RabbitMQConfig() { Host = " 192