小编gar*_*arh的帖子

为什么base64.b64encode()返回一个字节对象?

目的base64.b64encode()是将二进制数据转换为ASCII安全"文本".但是,该方法返回一个bytes类型的对象:

>>> import base64
>>> base64.b64encode(b'abc')
b'YWJj'
Run Code Online (Sandbox Code Playgroud)

简单地接受输出就很容易decode(),但我的问题是:base64.b64encode()返回的意义是什么,bytes而不是str

python unicode base64 encoding python-3.x

29
推荐指数
2
解决办法
7853
查看次数

创建随机二进制文件

我正在尝试使用python来创建随机二进制文件.这就是我已经拥有的:

f = open(filename,'wb')
for i in xrange(size_kb):
    for ii in xrange(1024/4):
        f.write(struct.pack("=I",random.randint(0,sys.maxint*2+1)))

f.close()
Run Code Online (Sandbox Code Playgroud)

但它非常慢(我的3.9GHz SSD磁盘机上size_kb = 1024,为0.82秒).一个很大的瓶颈似乎是随机int生成(用0替换randint()会将运行时间从0.82s减少到0.14s).

现在我知道有更有效的方法来创建随机数据文件(即dd if =/dev/urandom)但是我试图解决这个问题是为了好奇...有没有明显的方法来改善它?

python random

17
推荐指数
1
解决办法
2万
查看次数

使用自定义json内容类型是一个好主意

我正在设计RESTful API并尝试描述并使文档更清晰我想要声明我的内容类型http头,如下所示:

Content-Type: application/vnd.mycorp.mydatatype+json
Run Code Online (Sandbox Code Playgroud)

其中mycorp是我公司特有的标识符,mydatatype对每种数据类型都是唯一的.一个例子是:

Content-Type: application/vnd.ford.car+json

{
"manufactured_year": 2000
, "color": "blue"
, "hp": 160
, "model" "Focus"
, "type": "sedan"
}
Run Code Online (Sandbox Code Playgroud)

为了使POST有效并且将作为响应的一部分发送,将需要此内容类型.在我看来,这是一种很好的方法来定义有效负载内部的规则.

我似乎无法找到关于这是一个好主意还是IETF标准甚至允许的好资源.

所以,问题是:哪个更可行,application/vnd.mycorp.mydatatype + json或者只是application/json?

http http-headers

14
推荐指数
2
解决办法
4776
查看次数

在Android onDraw()上直接绘制画布和绘制位图然后画布之间的区别

我正在编写一个显示信号的自定义视图.为了缩短我的onDraw()时间,我将目前为止在Bitmap中绘制的所有内容都缓存,并在每次onDraw()调用中追加到它.通过这样做,我可以节省大量的时间,因为我只需要一次绘制几个修复,而不是重做整个事情.

虽然事情困扰着我 - 它似乎直接绘制到提供的画布提供了比首先在位图上绘制然后在画布上绘制位图更准确的绘图.通过查看下图的下半部分,您可以看到差异:

查看信号的下半部分以查看差异 - 有相同的drawLine调用

我在https://github.com/gardarh/android-uglybitmapdrawing/上传了一个显示差异的演示项目,但相关代码如下:

@Override
public void onDraw(Canvas canvas) {
    if(cachedBitmap == null) {
        cachedBitmap = Bitmap.createBitmap(getWidth(), 200, Config.ARGB_8888);
        cachedCanvas = new Canvas(cachedBitmap);
    }

    for(int i = 0; i < COORDS.length; i++) {
        float[] curCoords = COORDS[i];
        canvas.drawLine(curCoords[0], curCoords[1], curCoords[2], curCoords[3], linePaint);
        cachedCanvas.drawLine(curCoords[0], curCoords[1], curCoords[2], curCoords[3], linePaint);
    }
    canvas.drawBitmap(cachedBitmap, 0, 120, null);
}
Run Code Online (Sandbox Code Playgroud)

为什么两条迹线不一样,更重要的是,如何让下面的迹线看起来像上面的迹线?

android android-custom-view android-canvas

6
推荐指数
1
解决办法
2703
查看次数