导航:首页 > 操作系统 > androidbytearray

androidbytearray

发布时间:2023-08-01 19:17:32

android如何存储一个ArrayList数组到本地

ArrayListlist=newArrayList();
SharedPreferencespreferences=getSharedPreferences("base64",
MODE_PRIVATE);
//创建字节输出流
ByteArrayOutputStreambaos=newByteArrayOutputStream();
try{
//创建对象输出流,并封装字节流
ObjectOutputStreamoos=newObjectOutputStream(baos);
//将对象写入字节流
oos.writeObject(list);
//将字节流编码成base64的字符窜
Stringlist_Base64=newString(Base64.encodeBase64(baos
.toByteArray()));
Editoreditor=preferences.edit();
editor.putString("list",list_Base64);

editor.commit();
}catch(IOExceptione){
//TODOAuto-generated
}
Log.i("ok","存储成功");

⑵ Android JNI部分得到jbytearray,java用byte[]数组进行接收。该如何实现

利用
jni
的回调机制
java层定义
native方法
private
void
aa(string
c)
{
output(c);
};
JNI层添加native数组
static
JNINativeMethod
array
=
{
{
“aa",
"(JString)V",
(void*)JNI_aa,
},
};
jni层调用注册的方法
jclass
cls
=
(*env)->GetObjectClass(env,
log);
jmethodID
jmid
=
(*env)->GetMethodID(env,
cls,
"aa",
"(Ljava/lang/String;)V");
jstring
info
=
(*env)->NewStringUTF(env,
"out!");
(*env)->CallVoidMethod(env,log,
jmid,info);
//调用方法
//释放string
(*env)->ReleaseStringUTFChars(env,info,(*env)->GetStringUTFChars(env,
info,
FALSE));

⑶ Android 怎样用sqlite储存byte数组

在进行Android开发过程中,我们经常会接触到Drawable对象(官方开发文档:A Drawable is a general abstraction for "something that can be drawn."),那么,若要使用数据库来进行存储及读取.

@Override
public void onCreate(SQLiteDatabase database) {
executeSQLScript(database, "create.sql");
}

private void executeSQLScript(SQLiteDatabase database, string dbname){
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte buf[] = new byte[1024];
int len;
AssetManager assetManager = context.getAssets();
InputStream inputStream = null;

try{
inputStream = assetManager.open(dbname);
while ((len = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, len);
}
outputStream.close();
inputStream.close();
String[] createScript = outputStream.toString().split(";");
for (int i = 0; i < createScript.length; i++) {
String sqlStatement = createScript[i].trim();
// TODO You may want to parse out comments here
if (sqlStatement.length() > 0) {
database.execSQL(sqlStatement + ";");
}
}
} catch (IOException e){
// TODO Handle Script Failed to Load
} catch (SQLException e) {
// TODO Handle Script Failed to Execute
}
}

⑷ Android开发之如何读写文件

【转】

首先介绍如何存储数据,显然,要将数据从应用中输出到文件中,必须得到一个输出流outPutStream,然后往输出流中写入数据,在这里Android自带了一个得到应用输出流的方法

FileOutputStream fos =context.openFileOutput(“yuchao.txt”,Context.MODE_PRIVATE); (1)

其中第一个属性为文件名,第二个属性为读写模式(有关读写模式的说明下面将详细阐述),

然后在文件输出流fos中便可以写入数据

Fos.write(“Hi,”I’m Chao Yu!”.getBytes());

用完文件输出流之后记得关闭

fos.close();

这样,在/data/data/packageName/file目录下就生成了一个文件名为yuchao.txt的文件,文件中的内容为” Hi,I’m Chao Yu!”

有关(1)中读写模式其实就是制定创建文件的权限以及在读写的时候的方式,Android中提供了以下几种读写模式

Context.MODE_PRIVATE = 0

该模式下创建的文件其他应用无权访问,并且本应用将覆盖原有的内容

Context.MODE_APPEND = 32768

该模式下创建的文件其他应用无权访问,并且本应用将在原有的内容后面追加内容

Context.MODE_WORLD_READABLE = 1

该模式下创建的文件其他应用有读的权限

Context.MODE_WORLD_WRITEABLE = 2

该模式下创建的文件其他应用有写的权限

如果需要将文件设置为外部应用可以读写,可将读写模式设置为Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE

一般情况下,各个应用维护的数据都在一个特定的文件夹中,即上面所提到的/data/data/packageName/file(存在于手机存储中),但手机内存毕竟有限,所以有些情况下,我们需要往SD卡中写入数据文件,这其实和普通的java web 应用步骤一样,都是先创建特针对特定目录特定文件的输出流,然后往输出流中写数据,这里要注意一个方法,就是获取SD卡根目录的方法,随着Android系统不断升级,SD卡的根目录随时都有可能改变,Android中得到SD卡根目录的方法是

File sdCardDir = Environment.getExternalStorageDirectory();

然后就可以进行下面的步骤

File saveFile = new File(sdCardDir, “yuchao.txt”);

FileOutputStream outStream = new FileOutputStream(saveFile);

outStream.write("Hi,I’m ChaoYu".getBytes());

outStream.close();

值得注意的是,在往SD卡中写数据的时候,健壮的代码必须考虑SD卡不存在或者写保护的情况,故在写入之前,先做判断

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

……

}

接着,我们来学习下我们的应用程序如何读取文件中的数据,其实就是写的逆向过程

若要读取应用程序默认维护的文件(即/data/data/packageName/file目录下的文件),首先得到文件输入流

FileInputStream istream = this.context.openFileInput(“yuchao.txt”);

然后在内存中开辟一段缓冲区

byte[] buffer = new byte[1024];

然后创建一个字节数组输出流

ByteArrayOutputStream ostream = new ByteArrayOutputStream();

读出来的数据首先放入缓冲区,满了之后再写到字符输出流中

while((len=istream.read(buffer))!=-1){

ostream.write(buffer, 0, len);

}

最后关闭输入流和输出流

istream.close();

ostream.close();

将得到的内容以字符串的形式返回便得到了文件中的内容了,这里的流操作较多,故以一张图片来说明,见图1

return new String(ostream.toByteArray());

从SD卡中读取数据与上述两个步骤类似,故不再赘述,留给读者自己思考

如在开发过程中进行SD卡地读写,切忌忘了加入权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

至此,Android系统中有关文件数据的读写介绍完毕。

⑸ android 字符串转byte数组

Android 字符串、byte数组与16进制数组间的转换

<spanstyle="font-family:SimSun;font-size:14px;">//字符串转换成16进制文字列的方法
publicStringtoHex(Stringstr){
StringhexString="0123456789ABCDEF";
byte[]bytes=str.getBytes();
StringBuilderhex=newStringBuilder(bytes.length*2);
for(inti=0;i<bytes.length;i++){
hex.append(hexString.charAt((bytes[i]&0xf0)>>4));//作用同n/16
hex.append(hexString.charAt((bytes[i]&0x0f)>>0));//作用同n
hex.append('');//中间用空格隔开
}
returnhex.toString();
}

//将16进制数组转换为字符串
publicstaticStringdecode(Stringbytes){
StringhexString="0123456789ABCDEF";
ByteArrayOutputStreambaos=newByteArrayOutputStream(bytes.length()/2);
//将每2位16进制整数组装成一个字节
//for(inti=0;i<bytes.length();i+=2)
//baos.write((hexString.indexOf(bytes.charAt(i))<<4|hexString.indexOf(bytes.charAt(i+1))));
//将每3位(第3位为空格)中的前2位16进制整数组装成一个字节
for(inti=0;i<bytes.length();i+=3){
baos.write((hexString.indexOf(bytes.charAt(i))<<4|hexString.indexOf(bytes.charAt(i+1))));
}
returnnewString(baos.toByteArray());
}</span>

详细

⑹ android图片压缩避免OOM

简单吹下牛:很多app都会要加载图片,但是如果不压缩图片就很容易OOM,

个人看来OOM 出现原因总的来说分为两种:

一种是内存溢出(好像在扯淡,OOM本身就是内存溢出)

另一种是:图片过大,一个屏幕显示不完全造成,似乎也是一。。 如有错误纯属扯淡;

为了避免上面的情况:加载图片的时候可以进行压缩,上传的时候要可以进行压缩,在图片不可见的时候进行回收(onDetach()),再吹一句 用了fresco+压缩之后加载图片完全没问题了。

一、质量压缩方法:

privateBitmap compressImage(Bitmap image) {

ByteArrayOutputStream baos =newByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG,100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

intoptions =100;

while( baos.toByteArray().length /1024>100) {//循环判断如果压缩后图片是否大于100kb,大于继续压缩

baos.reset();//重置baos即清空baos

image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中

options -=10;//每次都减少10

}

ByteArrayInputStream isBm =newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中

Bitmap bitmap = BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片

returnbitmap;

}

二、图片按比例大小压缩方法(根据Bitmap图片压缩)

privateBitmap comp(Bitmap image) {

ByteArrayOutputStream baos =newByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG,100, baos);

if( baos.toByteArray().length /1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出

baos.reset();//重置baos即清空baos

image.compress(Bitmap.CompressFormat.JPEG,50, baos);//这里压缩50%,把压缩后的数据存放到baos中

}

ByteArrayInputStream isBm =newByteArrayInputStream(baos.toByteArray());

BitmapFactory.Options newOpts =newBitmapFactory.Options();

//开始读入图片,此时把options.inJustDecodeBounds 设回true了

newOpts.inJustDecodeBounds =true;

Bitmap bitmap = BitmapFactory.decodeStream(isBm,null, newOpts);

newOpts.inJustDecodeBounds =false;

intw = newOpts.outWidth;

inth = newOpts.outHeight;

//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

floathh = 800f;//这里设置高度为800f

floatww = 480f;//这里设置宽度为480f

//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

intbe =1;//be=1表示不缩放

if(w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放

be = (int) (newOpts.outWidth / ww);

}elseif(w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放

be = (int) (newOpts.outHeight / hh);

}

if(be <=0)

be =1;

newOpts.inSampleSize = be;//设置缩放比例

//重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了

isBm =newByteArrayInputStream(baos.toByteArray());

bitmap = BitmapFactory.decodeStream(isBm,null, newOpts);

returncompressImage(bitmap);//压缩好比例大小后再进行质量压缩

}

⑺ android如何显示blob字段求答案

android如何显示blob方法如下:
BOLB表示二进制大对象,这种数据类型通过用来保存图片,图象,视频等。

一,使用场景:
http://blog.sina.com.cn/s/blog_8cfbb99201012oqn.html

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
1,重写构造方法
public MySQLiteOpenHelper(Context context, String name,
CursorFactory cursor, int version) {
super(context, name, cursor, version);
}

2, 创建数据库的方法
public void onCreate(SQLiteDatabase db) {
3, 创建一个数据库,表名:imagetable,字段:_id、image。
db.execSQL("CREATE TABLE imagetable (_id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB)");
}

4, 更新数据库的方法
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

5,创建助手类的实例
// CursorFactory的值为null,表示采用默认的工厂类
mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null,1);
6, 创建一个可读写的数据库
mydb = mySQLiteOpenHelper.getWritableDatabase();

7,将图片转化为位图
Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.erweima);

int size=bitmap1.getWidth()*bitmap1.getHeight()*4;
//创建一个字节数组输出流,流的大小为size
ByteArrayOutputStream baos=new ByteArrayOutputStream(size);
//设置位图的压缩格式,质量为100%,并放入字节数组输出流中 bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
//将字节数组输出流转化为字节数组byte[]
byte[] imagedata1=baos.toByteArray();

//将字节数组保存到数据库中
ContentValues cv=new ContentValues();
cv.put("_id", 1);
cv.put("image", imagedata1);
mydb.insert("imagetable", null, cv);
//关闭字节数组输出流
baos.close();

二,从数据库中查询的方法:
1,创建一个指针
Cursor cur=mydb.query("imagetable", new String[]{"_id","image"}, null, null, null, null, null);
byte[] imagequery=null;
if(cur.moveToNext()){
2,将Blob数据转化为字节数组imagequery=cur.getBlob(cur.getColumnIndex("image"));
}
3,将字节数组转化为位图
Bitmap imagebitmap=BitmapFactory.decodeByteArray(imagequery, 0, imagequery.length);
iv1=(ImageView) findViewById(R.id.imageView1);
4,将位图显示为图片
iv1.setImageBitmap(imagebitmap);

阅读全文

与androidbytearray相关的资料

热点内容
如何让软件在多个安卓系统上运行 浏览:569
java判断半角 浏览:878
java判断正负 浏览:318
刷头条程序员的日常 浏览:102
吉林程序员吐槽 浏览:243
单片机温度范围 浏览:419
程序员为什么素质低 浏览:897
可爱的程序员小姐姐 浏览:145
服务器上网站的地址 浏览:798
苹果平板如何找到app资源库 浏览:321
阿里云可以云服务器地址 浏览:249
熊猫绘画app如何导入图片 浏览:555
如何自己编辑手机app 浏览:924
程序员那么可爱带的项链 浏览:532
安卓系统导航mic什么意思 浏览:192
编译sdk如何输出bin文件 浏览:677
如何用html5开发app 浏览:142
怎么隐藏苹果的app 浏览:326
上海積架空气压缩机 浏览:457
51单片机换行 浏览:738