gzip的一个小坑

Spring Boot整合OpenFeign:从基础配置到高级定制,一篇搞定 本文详细介绍了Spring Boot如何整合OpenFeign,从基础配置到高级定制,包括依赖添加、Feign客户端定义、超时控制、日志配置、自定义编解码器、请求拦截器等实用技巧。通过实际案例和最佳实践,帮助开发者高效实现微服务间的HTTP调用,提升开发效率和系统性能。 阅读详情

使用gzip压缩游戏资源的时候踩了一个小坑。

gzip命令默认会将被压缩文件的名称写入到zip包中,所以文件img.png和其副本img_copy.png压缩后的md5值就不相同了。

简单的测试脚本如下:

#! /bin/bash
echo "the md5 of original png :"
md5 /temp/test/img.png
md5 /temp/test/img_copy.png

gzip -2 -5  -c /temp/test/img.png > /temp/test/img.zip
gzip -2 -5  -c /temp/test/img_copy.png > /temp/test/img_copy.zip

echo "the md5 of zip :"
md5 /temp/test/img.zip
md5 /temp/test/img_copy.zip

执行结果如下:

the md5 of original png :
MD5 (/temp/test/img.png) = b00a1862e781da625df40658d54f48bb
MD5 (/temp/test/img_copy.png) = b00a1862e781da625df40658d54f48bb
the md5 of zip :
MD5 (/temp/test/img.zip) = d17c8b512e0eb2c0df46d1cf294d11ba
MD5 (/temp/test/img_copy.zip) = a1bc3d6f0d2c0cb174ca99190d8b6744

压缩前两个png的md5值是相同的,压缩后的两个zip的md5值确实不同了。

使用gzip –help查看命令参数:

usage: gzip [-123456789acdfhklLNnqrtVv] [-S .suffix] [ [ …]]
-1 –fast fastest (worst) compression
-2 .. -8 set compression level
-9 –best best (slowest) compression
-c –stdout write to stdout, keep original files
–to-stdout
-d –decompress uncompress files
–uncompress
-f –force force overwriting & compress links
-h –help display this help
-k –keep don’t delete input files during operation
-l –list list compressed file contents
-N –name save or restore original file name and time stamp
-n –no-name don’t save original file name or time stamp
-q –quiet output no warnings
-r –recursive recursively compress files in directories
-S .suf use suffix .suf instead of .gz
–suffix .suf
-t –test test compressed file
-V –version display program version
-v –verbose print extra statistics

关键的一句是: -n –no-name don’t save original file name or time stamp
gzip 命令中设置-n参数,压缩时不保存文件名称。
更改后的压缩命令如下:

gzip -2 -5  -c -n /temp/test/img.png > /temp/test/img.zip

PS:测试环境为Mac,自带gzip、md5命令。

二、ROS2完成Docker容器和宿主机通信,使用ros2 topic list看到,但是无法echo 如果容器和主机权限不一致,则会导致无法通信(我的代码中,docker容器是root,宿主机是普通用户),虽然可以查询到相关话题,但是订阅后没有消息输出。比如,docker容器创建了一个共享内存,其所有者为docker容器用户root,当宿主机去访问的时候,由于用户不同,没有权限访问,也就无法进行信息传递。该方法只是临时修改共享内存的权限,每次运行完,需要重新运行上述命令,才可以进行通信。在运行的过程中,ROS2使用了共享内存机制,会共享内存。运行之后,宿主机和容器可能用户名不同,这是因为。 阅读详情

相关推荐

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 前言 本人近期在工作中遇到需要对某场景下利用海康相机进行图像缺陷检测与对应路径规划。通过对海康相机示例代码进行吸收与借鉴,最终实现了对海康相机的控制,并增加HSmartWindowControl控件,实现图像的实时显示与平移缩放功能;通过listview+toolstrip实现日志显示与类型(提示、警告、错误)分类;同时自行编制算法实现对缺陷的识别以及缺陷外扩矩形范围内的路径规划。 1.日志记录 代码如下(示例):

weixin_37864926的博客 2717

GZIPOutputStream & GZIPInputStream 数据压缩&解压

将大json数据进行压缩和解压

qq_37700773的博客 4814

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

Gzip压缩

vue项目进行gzip压缩

weixin_39964419的博客 6313

STM32外部中断与事件机制深度解析:从硬件触发到软件响应

本文深入解析STM32外部中断与事件机制,从硬件触发到软件响应的完整流程。通过对比中断和事件的应用场景、响应速度及配置方法,帮助开发者优化嵌入式系统设计,特别适合需要低功耗或高实时性的项目。

weixin_29175469的博客 407

易智联LM401模块学习(一)——初识Lora

Lora

weixin_46046597的博客 1054

Linux gzip命令教程:如何有效地压缩和解压文件(附实例详解和注意事项)

gzip(GNU zip)是一种在Linux系统中常见的命令行压缩工具。它使用DEFLATE压缩算法来减小文件的大小,使文件更易于存储和传输。gzip主要用于压缩文本文件、Tar归档文件和网页。不建议使用gzip来压缩图像、音频、PDF文档和其他已经压缩的二进制文件。

u012964600的博客 3万+

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1219

windows WAMP 配置gzip踩坑过程

踩坑过程测试服务器用的是windows wamp一键安装的环境,在准备开户gzip遇到了一个小坑,这里记录一下,希望能帮助到某个人,节省一点点时间…配置第一步自然是上网搜了,找到了一篇介绍文章,介绍的也特别详细: Apache如何开启Gzip压缩 整篇文章介绍的非常详细,不会的同学可以参考。 我仔细的按着这个步骤做了,但是在重启的时候,服务启动不起来,查了日志、核对配置文件,无果。

icewfz的博客 918

IEEE Access 上岸指南,附含泪整理的 cover letter 、沟通邮件、终版文档等资料包

终于上岸了! 我是一个小硕,本科期间发表过两篇水文,奈何学校有更高的毕业要求,只能硬着头皮尝试一下 SCI。 想投 IEEE Access 的朋友都应该知道 小木虫论坛 对这个期刊的讨论,褒贬不一,有的人说是大水刊,有的人说有难度。 比如: @wow_: 不可否认,灌水期刊。只要之前中过一篇,再投基本没有不录用的!我们实验室其他老师说过一区除外的收费期刊都应该禁止灌水。 @pssp: 审稿人还...

kurryluo的博客 1万+

(考研湖科大教书匠计算机网络)第四章网络层-第三节3、4:划分子网的IPv4地址和无分类IP地址

子网掩码: 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号子网掩码使用连续的比特1来对应网络号和子网号子网掩码使用连续的比特0来对应主机号将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址如下图。

快乐江湖的博客 1345

QProcess使用waitForFinished的小坑

有些类似有超时机制的接口在使用上就需要注意了

Qt君 1万+

29、几何形态测量学在蝴蝶翅膀研究中的应用

本博客介绍了几何形态测量学在花斑木蛱蝶(Pararge aegeria)翅膀研究中的应用,探讨了环境因素对蝴蝶翅膀大小和形状的影响。通过选择合适的地标并采用Procrustes分析方法,研究揭示了不同景观类型下翅膀形状的差异及其潜在的适应性意义。文章还讨论了发育可塑性在飞行形态变异中的作用,并比较了几何形态测量学与其他传统方法的优势。最后提出了未来研究方向,包括多因素综合分析、发育机制探索及长期生态监测,为理解蝴蝶的适应性进化提供了重要线索。

ff678的博客 107

curl下载文件遇到的一个小坑,保持原文件名

最近做了一个下载文件的api,然后实际并没有想象中的美好,用户只能使用curl来下载文件,类似如下: curl -X POST http://ip/company/api//export -H ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8’ -H ‘Ac...

pudge_yang_zhang的博客 4207

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

requests中headers设置的小坑

headers = { "Host": "www.tmkoo.com", "Connection": "keep-alive", "Content-Length": "50", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp

wddzz 7232

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

json解析图片_WDL教程解析hello world与一些小坑

WDL教程-解析Helloworld与一些小坑新的学期 再接再厉上一篇介绍了一个初次运行的例子,但是即便是Hello world中我们也是有一些东西可以展开聊一聊的。在这一篇当中,我们重点说说几个细节。01WDL文件解析workflow Whello{String abc call hello{ input: abc=abc } call gzip{ input: tx...

weixin_42316952的博客 360

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

云服务ubuntu安装nginx,一些小坑

apt install nginx 就安装好了,运行 nginx -v 显示 版本号 删除nginx及相关的配置文件: sudo apt --purge remove nginx 启动 sudo nginx 编辑默认路径 sudo vim /etc/nginx/sites-available/default ## # You should look at the following URL's in order to grasp a solid understanding # o.

babytiger的专栏 2393

ERR_CONTENT_DECODING_FAILED

ERR_CONTENT_DECODING_FAILED,土翻译:“错误_内容_解码_失败”,就是访问项目的时候,有部分内容编码没有被识别。 这种错误通常发生于Http请求中的头部信息标识内容是gzip编码的,但实际上不是gzip编码。 原因汇总如下: 1. nginx及php.ini配置文件中gzip设置     (要关掉gzip编码设置,或者,保证内容是真正经过gzip编码的) 2. i...

zuozuo的博客 8553

vue项目性能优化方案

背景: 项目采用vue cli3搭建,集成前端组件以及地图效果,导致项目打包后资源包文件特别大,打包速度慢,首屏渲染耗时长,甚至出现左右界面图表数据不渲染的问题。 优化前准备: 首先我们需要先排查影响性能、导致打包资源文件过大的原因,以及代码的使用率 webpack-bundle-analyzer: npm install webpack-bundle-analyzer // vue.config.js文件(vue cli3根目录下的文件,如果没有,可创建此文件,用于webpack配置) modul

一只前端小菜鸟 2692

Python爬虫post一例

抓取博客园(https://www.cnblogs.com/)分类列表(下图红框所示),在浏览器直接查看网页的源码,是看不到这部分内容的. 抓取方法如下: 使用谷歌浏览器,按F12,切换到Network,点击第一个按钮开始抓包. 按F5重新刷新页面,左边会出现所有请求内容. 这里就需要一个一个人工查看,如下图,找到所需内容. 切换到Headers选项,可以查看...

weixin_30950887的博客 76

window mysql 备份_mysql的备份与还原,安装(window)

之前一直使用的navicat的自动的备份功能。但是在使用navicat的还原功能时,贼慢。今天要做的是window服务器上将mysql单个数据库备份。然后还原到我的mac笔记本上。本来以为很快的,中间遇到来一些小坑,搞了很久。1. 备份,从window服务器使用mysqldump命令来备份,由于后面还要下载到本地,所以备份同时要进行压缩,不然数据量很大,呆会下载要很久。D:\tool\mysql\...

weixin_32342639的博客 555

10分钟上手HumanInput:新手从零搭建第一个快捷键的完整教程

HumanInput 是一款轻量级的 JavaScript 键盘快捷键事件库(gzip 后仅约 8KB、零依赖),一行代码就能为网页绑定 `ctrl-s`、`a b c` 这类快捷键。本教程面向新手,带你 10 分钟从零搭建并验证你的第一个快捷键,同时体验它的组合键、事件序列和高性能状态追踪等实用功能。 [![HumanInput键盘快捷键库主题图:乐高小人举起Ctrl键](https://ra

gitblog_01172的博客 498

php swoole thread,php swoole task 踩坑及优化

如果有仔细看过 swoole task 的文档的话,应该都会注意到这句话task 操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。worker进程将无法接收新的请求task 如果阻塞会引发 woker 进程阻塞,造成服务无法工作,引发问题。我曾经使用 task 发送服务的链路日志,接收日志的服务出现bug,造成发送日志的 tas...

weixin_39819974的博客 208

webshell静态检测的绕过

一句话木马原理: 基于_POST,[]等的检测 base64编码: $b = base64_encode(‘_POST’); echo $b; echo ‘<br/>’; echo base64_decode($b); gzcompress压缩: $c = gzcompress('_POST'); echo $c; echo '<br/>'; echo gzuncompress($c); 注释: @${$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*

qq_61142406的博客 3641

swoole task 踩坑及优化

如果有仔细看过 swoole task 的文档的话,应该都会注意到这句话 task 操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。worker进程将无法接收新的请求 task 如果阻塞会引发 woker 进程阻塞,造成服务无法工作,引发问题。 我曾经使用 task 发送服务的链路日志,接收日志的服务出现bug,造...

PHP架构师的博客 6926
上一篇: 手游研发系列【1】—— csv解析方案
下一篇: didRegisterForRemoteNotificationsWithDeviceToken not called
程序员长弓
博客等级 码龄20年 650粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值