我有一个类TouchPoint,它实现了Serializable,因为它包含Bitmap,我为该类编写了writeObject和readObject:
private void writeObject(ObjectOutputStream oos) throws IOException {
long t1 = System.currentTimeMillis();
oos.defaultWriteObject();
if(_bmp!=null){
int bytes = _bmp.getWidth()*_bmp.getHeight()*4;
ByteBuffer buffer = ByteBuffer.allocate(bytes);
_bmp.copyPixelsToBuffer(buffer);
byte[] array = buffer.array();
oos.writeObject(array);
}
Log.v("PaintFX","Elapsed Time: "+(System.currentTimeMillis()-t1));
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{
ois.defaultReadObject();
byte[] data = (byte[]) ois.readObject();
if(data != null && data.length > 0){
_bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我得到了
SkImageDecoder :: Factory返回null
那我该怎么办呢.我知道可能的解决方案是将writeObject()更改为
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
_bmp.compress(Bitmap.CompressFormat.PNG, 100, byteStream);
oos.writeObject(byteStream.toByteArray);
Run Code Online (Sandbox Code Playgroud)
但这种方法慢了近10倍.
更新 发现实际问题是在之后
buffer.array(); …Run Code Online (Sandbox Code Playgroud) 我试图序列化一个类,我有一个位图变量.这是有点工作的代码....我需要帮助找出仍然存在的问题.....
private Bitmap myVideoScreenshotBm;
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeInt(myVideoScreenshotBm.getRowBytes());
out.writeInt(myVideoScreenshotBm.getHeight());
out.writeInt(myVideoScreenshotBm.getWidth());
int bmSize = myVideoScreenshotBm.getHeight() * myVideoScreenshotBm.getRowBytes();
ByteBuffer dst= ByteBuffer.allocate(bmSize);
myVideoScreenshotBm.copyPixelsToBuffer(dst);
byte[] bytesar=new byte[bmSize];
dst.position(0);
dst.get(bytesar);
out.write(bytesar);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
int nbRowBytes=in.readInt();
int height=in.readInt();
int width=in.readInt();
//
int bmSize = nbRowBytes * height;
byte[] toread= new byte[bmSize];
in.read(toread, 0, toread.length);
ByteBuffer dst= ByteBuffer.allocate(bmSize);
dst.put(toread);
dst.position(0);
myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
myVideoScreenshotBm.copyPixelsFromBuffer(dst);
}
Run Code Online (Sandbox Code Playgroud)
我没有得到错误,但我得到的位图是错的...另外,我不知道如何知道哪个Bitmap.Config标志是合适的......怎么知道?
任何帮助?
我有5张桌子.一个主要和另外四个(他们有不同的列).
这是我的主表(对象)的结构.
ID | 类型| 名字| 等等...
所以我想要做的是将对象与其他(obj_mobiles,obj_tablets,...)表连接,具体取决于类型字段.我知道我应该使用动态SQL.但我无法制作程序.我认为应该看起来像这样.
SELECT objects.type into @tbl FROM objects;
PREPARE stmnt FROM "SELECT * FROM objects AS object LEFT JOIN @tbl AS info ON object.id = info.obj_id";
EXECUTE stmnt;
DEALLOCATE PREPARE stmnt;
Run Code Online (Sandbox Code Playgroud)
Aslo伪代码
SELECT * FROM objects LEFT JOIN [objects.type] ON ...
Run Code Online (Sandbox Code Playgroud)
谁能发布程序?另外,我希望所有行不仅仅是1行.谢谢.