这个要使用反射
//Studentjava 注:里面没有写get方法,只有set方法
public class Student {
String id =null;
String name= null;
public void setId(String id) {
thisid = id;
}
public void setName(String name) {
thisname = name;
}
}
//Testjava
import javalangreflectField;
public class Test {
public static void main(String[] args) throws Exception {
Student stu = new Student();
stusetId("1");
stusetName("小明");
aa(stu);
}
public static void aa(Object obj) throws Exception {
Class clz =objgetClass();
Field[] field =clzgetDeclaredFields();
for(Field f:field)
{
String name = fgetName();
String value =(String) fget(obj);
Systemoutprintln(name+"="+value);
}
}
}
参考代码如下:
Type type = objectGetType();
switch(typeToString())
{
case "SystemInt32":
return "他是一个整数";
break;
case "SystemString":
return "字符串"
break;
case "SystemByte[]":
return "二进制信息"
}
按照你的代码改的话就是document.getElementsByTagName("param")[2].value = "my value";这样就可以了628 但是:document.getElementsByTagName跟根据tagname的yu比如<input type="text" value="" />的tagname是input0352你的本意是不是按照name来得到对象呢<input type="text" name="param" value="xyz" /><input type="text" name="param" value="xyz" /><input type="text" name="param" value="xyz" />所以h正确的应该是:document.getElementsByName("param")[2].value = "my value";
RGW是一个对象处理网关。数据实际存储在ceph集群中。利用librados的接口,与ceph集群通信。RGW主要存储三类数据:元数据(metadata)、索引数据(bucket index)、数据(data)。这三类数据一般存储在不同的pool中,元数据也分多种元数据,存在不同的ceph pool中。
1、 Metadata
元数据信息包括:user,bucket,以及bucketinstance。其中:
user: 主要是对象存储的用户信息
bucket:主要维护bucket name与bucket instance id之间的映射信息
bucketinstance:维护了bucket instance信息
查看user的元数据如下:
radosgw-admin metadata list user:
radosgw-admin metadata get user:testid:
radosgw-admin metadata list bucket:
radosgw-admin metadata get bucket:first:
radosgw-admin metadata list bucketinstance:
radosgw-admin metadata get bucketinstance:first:{bucket_id}
2、Bucket Index
bucket index主要维护的是一个bucket中object的索引信息。一个bucket对应一个或多个rados object(开启bucket shards下)。维护的是一个key-val的map结构,map存放在object的omap(rocksdb)中,key对应的rgw object,val是关于rgw object的一些元数据信息,检索bucket的存放的object时,需要这些信息。omap也包含一个Header,其存放的是bucket account info,如此bucket中Object的个数,总的size等。
3、Data
rgw object内容,存放在一个或多个rados object中。rados object分为header和tail部分,header最多可以容纳512KB的数据,如果一个rgw object的大小小于512KB,那么只有header。否则剩余的数据会按照集群rados object的大小条带化分割成多个rados object。
在Pool: {zone}rgwmeta利用namespace隔离多个存储空间:
对于Pool: {zone}rgwlog也包含多个namespace:
当检索对象存储中的一个object时,会包含三个要素:user,bucket,object。user主要是RGW用于获取user id验证ACL;bucket及obejct用于确定object在pool中的位置。
User
user数据存储在 {zone}rgwmeta:usersuid 中,如下:
包含两部分: ups3: user本身信息; ups3buckets: 用户所属的bucket。
ups3: 用户的基本信息,及ACL/Bucekt Quota/User Quota等;对应struct RGWUserInfo, 定义于rgw_commonh。
ups3buckets:用户所属的Buckets,key-value结构,存放于omap结构中;对应struct cls_user_bucket_entry,定义于rgw_commonh,数据 *** 作如下:
通过{uid}buckets查到用户具有哪些buckets,并且这些bucket以下基本数据。
Bucket
Bucket信息存在在 {zone}rgwmeta:root 中,如下:
first: 记录了bucket与bucket_instance_id的对应关系,其对应于数据结构:struct RGWBucketEntryPoint
bucketmetafirst:1c60b268-0a5d-4718-ad02-e4b5bce824bf441664: bucket instance;寻址方式:bucketmeta{tenant}:{bucketname}:{bucket_id};对应结构体:struct RGWBucketInfo。
其中Bucket ACL及IAM Policy存放在bucket instance object的attr中。如下:
获取Bucket ACL及IAM Policy数据如下:
Object
Bucket Index: Bucket中包含的Object信息,都存放在一个或多个Object的 omap 中。此omap为一个key-value结构,key为object的名称,value对应 struct rgw_bucket_dir_entry : cls_rgw_typesh 。
Bucket Index Object:
如下:
在此bucket下,有一个object: ntpconf:
检索value:
omap header记录了以下统计信息:
对象存储object的数据存放在pool: {zone}rgwbucketsdata 中。object的构成及寻址分为以下两类:
一个RGW Object可以由一个或多个rados object构成。其中第一个 object 是此RGW 的 head 对象,主要包含一些元数据信息,如 manifest, ACLs, content type, ETag, and user-defined metadata 。这些metadata存放在此head 对象的xattr中。其中 manifest 描述了此rgw object在分布情况。同时,此head对象,最多可额外容纳 4MB 数据,如果RGW Object大小下于 4MB ,那么此 RGW Object就不会分片,只有此 head 对象。
如下检索:
目前bucket下有一个 ntpconf , <4MB 。检索其 manifest :
如上:
max_head_size: 表示head对象最大size;
head_size: 表示当前head 对象size;
prefix: 用于在rados中分片object的寻址。
RGW OBject ACL:
上传一个 >4MB 的 RGW Object,检索其 manifest 信息:
Manifest信息:
根据 manifest 检索对象:
对于一个大的RGW Object,会被切割成多个独立的RGW Object上传,称为multipart。multipar的优势是断点续传。s3接口默认切割大小为15MB。
在此,上传一个60MB大小的Object。
分成了四个部分上传,查看rados对象:
包含了三类对象, head,multipart,shadow 。
multipart 下的 manifest :
所有的object的检索是根据上述manifest信息构建object index:
在上以上的信息中,此RGW Object大小为48128000字节,分为4段,三段15MB,最后一段为920KB。同时每段存储在rados集群中的条带化大小为4MB。因此15MB大小的分段,也分为4个rados object,一个multipart首部,及3个shadow分片。920KB大小的分段只有一个multipart首部。
rgwroot :
包含的都是zone,zonegroup,realm等信息
反射机制。
把a换成你的Object对象就行了
import javalangreflectField;
public class Test {
public static void main(String[] args) throws Exception {
A a = new A();
aname = "test";
aage = 20;
Field[] fields = agetClass()getFields();
for (int i = 0; i < fieldslength; i++) {
Field field = fields[i];
fieldsetAccessible(true);//忽略访问权限,私有的也可以访问
Systemoutprintln(fieldgetName() + " = " + fieldget(a));
}
}
}
class A {
public String name = "";
public int age = 0;
}
以上就是关于如何获取参数为Object对象的具体属性全部的内容,包括:如何获取参数为Object对象的具体属性、如何获取object中的值、如何获取 objectdataprovider等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)