如何获取参数为Object对象的具体属性

如何获取参数为Object对象的具体属性,第1张

这个要使用反射

//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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9318200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存