小编Ars*_*niy的帖子

在Java中将文件读入byte []数组的优雅方式

可能重复:
Java中的文件到byte []

我想从文件中读取数据并将其解组为Parcel.在文档中不清楚,FileInputStream具有读取其所有内容的方法.为了实现这一点,我做了以下事情:

FileInputStream filein = context.openFileInput(FILENAME);


int read = 0;
int offset = 0;
int chunk_size = 1024;
int total_size = 0;

ArrayList<byte[]> chunks = new ArrayList<byte[]>();
chunks.add(new byte[chunk_size]);
//first I read data from file chunk by chunk
while ( (read = filein.read(chunks.get(chunks.size()-1), offset, buffer_size)) != -1) {
    total_size+=read;
    if (read == buffer_size) {
         chunks.add(new byte[buffer_size]);
    }
}
int index = 0;

// then I create big buffer        
byte[] rawdata = new byte[total_size];

// then I copy data …
Run Code Online (Sandbox Code Playgroud)

java file-io android file

70
推荐指数
6
解决办法
16万
查看次数

memcache.get返回错误的对象(Celery,Django)

这是我们目前的情况:

  1. 我们试图获得缓存的django模型实例,缓存键包括模型名称和实例ID.使用Django的标准memcached后端.该程序是非常广泛使用的常用程序的一部分,不仅在芹菜中.
  2. 有时(随机和/或很少)cache.get(key)返回错误的对象:int或不同的模型实例,甚至出现了same-model-different-id情况.通过检查型号名称和id以及缓存键的对应关系来捕捉这个.
  3. bug只出现在我们的三个celery任务的上下文中,永远不会在python shell或其他芹菜任务中重现.UPD:仅在长时间运行的CPU-RAM密集型任务下出现
  4. 缓存存储正确的值(我们在错误出现时手动检查)
  5. 使用相同的参数再次调用相同的任务可能不会重现该问题,尽管概率要高得多,因此错误出现倾向于在同一时间段内"分组"
  6. 重启芹菜解决了随机时间段(分钟 - 周)的问题
  7. *NEW*这与内存溢出无关.发生这种情况时,我们总是至少有2Gb可用内存.
  8. *新*我们有cache_instance = cache.get_cache("cache_entry")静态代码.在调查过程中,我发现错误发生的那一刻会cache_instance.get(key)返回错误的值,尽管get_cache("cache_entry").get(key)在下一行返回正确的值.这意味着错误消失太快或由于某种原因cache_instance对象被破坏.django的缓存线程返回的缓存实例对象不安全吗?
  9. *NEW*我们记录了非常奇怪的情况:作为缓存中的另一个错误对象,我们得到了模型实例w/o id set.这意味着,实例从未保存到DB,因此无法缓存.(我希望)
  10. *新*MemoryError这些天至少记录了一个

我知道,所有这些听起来都像是某种魔法......而且,真的,任何想法如何可能或如何调试这将是非常感激的.

PS:我目前的假设是这与多处理有关:只要在静态代码中创建缓存实例,并且在工作进程分叉之前,这将导致所有工作者共享相同的套接字(这听起来似乎合理吗?)

python django memcached caching celery

9
推荐指数
2
解决办法
1743
查看次数

OpenCV 2.4.1:UnsatisfiedLinkError

我有一个Android项目,它有本机代码.在这个原生部分,我使用OpenCV.当我使用OpenCV 2.3.1时,一切都编译好了,但是当我试图切换到版本2.4.1时,我遇到了问题:

它编译没有任何错误,但是当我启动我的应用程序时,由于UnsatisfiedLinkError,它无法加载我的库.

Cannot load library: link_image[1936]:    37 could not load needed library 'libopencv_java.so' for 'mylibrary.so' (load_library[1091]: Library 'libopencv_java.so' not found)
Run Code Online (Sandbox Code Playgroud)

我看到Open CV尝试加载libopencv_java.so,但我不需要它,我不在java代码中使用OpenCV.这个图书馆的大小> 5M.

如何编译而不将此lib添加到项目中?

java java-native-interface android opencv android-ndk

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

用ACTION_IMAGE_CAPTURE来克服bug的美妙方法

我遇到了问题:ACTION_IMAGE_CAPTURE intent的行为取决于硬件制造商.

我认为,从照片库插入相机拍摄照片的最佳方法必须是以下内容

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, CAPTURE_IMAGE_REQUEST);
Run Code Online (Sandbox Code Playgroud)

然后得到uri onActivityResult:

switch (requestCode) {
    case CAPTURE_IMAGE_REQUEST: {
         if(resultCode == Activity.RESULT_OK) {
              Uri uri = intent.getData();// content uri of photo in media gallery
              //do something with this
         }
         break;
    }
Run Code Online (Sandbox Code Playgroud)

但是我知道,这在许多设备上都不起作用; 此外,我发现了几种不同的Camera app行为场景:

  • 某些设备有此事件的错误,因此无法获得完整的照片,并且您只能使用公共目录中的tmp文件获取512px宽的照片
  • 一些设备(包括我的)将照片插入图库,但不返回Uri.(getData()返回null,intent extras只有布尔键'define-data',value = true)如果我尝试通过公共tempfile获取照片,那么照片将被插入到gallery和tempfile中.
  • 有些设备不会将拍摄的照片插入图库 - 我必须手动完成
  • 我不知道,但可能有其他不同的风景

那么,是否存在管理此类问题的最佳实践,以涵盖广泛的设备和制造商?

在这种情况下,我需要从相机拍照,将其插入画廊,然后在画廊中获取uri的照片.

java camera android android-intent

5
推荐指数
1
解决办法
3328
查看次数

非阻塞并发wsgi服务器

我试图能够同时响应传入的Web请求,而处理请求包括相当长的IO调用.我打算使用gevent,因为它应该是"非阻塞的"

我发现的问题是,即使我有很多gevent线程,请求也会按顺序处理.由于某种原因,请求由单个绿色线程提供.

我有nginx(默认配置在这里我认为不相关),我也有uwsgi和简单的wsgi应用程序模拟IO阻塞调用gevent.sleep().他们来了:

uwsgi.ini

[uwsgi]
chdir = /srv/website
home = /srv/website/env
module = wsgi:app
socket = /tmp/uwsgi_mead.sock
#daemonize = /data/work/zx900/mob-effect.mead/logs/uwsgi.log
processes = 1
gevent = 100
gevent-monkey-patch
Run Code Online (Sandbox Code Playgroud)

wsgi.py

import gevent
import time
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    t0 = time.time()
    gevent.sleep(10.0)
    t1 = time.time()
    return "{1} - {0} = {2}".format(t0, t1, t1 - t0)
Run Code Online (Sandbox Code Playgroud)

然后我同时(几乎)在我的浏览器中打开两个标签,这是我得到的结果:

1392297388.98 - 1392297378.98 = 10.0021491051 
# first tab, processing finished at 1392297378.98

1392297398.99 - 1392297388.99 = 10.0081849098 
# second tab, …
Run Code Online (Sandbox Code Playgroud)

python wsgi gevent flask uwsgi

5
推荐指数
1
解决办法
2454
查看次数