Este artigo descreve o método Java de analisar arquivos de imagem médica do DCM e extrair informações do arquivo. Compartilhe -o para sua referência, como segue:
1. Instalação
Primeiro, vá ao Github para baixar o código -fonte e execute a instalação do MVN para instalação local. O repositório central do MAVEN não tem o frasco. . Após a instalação bem -sucedida, o seguinte é o seguinte:
Em seguida, apresente o pacote JAR no arquivo pom.xml:
<Depencency> <voundid> org.dcm4che </foupidId> <TRAFACTID> dcm4che-core </artifactId> <versão> 3.3.2 </versão </dependency>
2. Categoria de teste
/** * ProjectName: xxx * nome do arquivo: displayTag.java * packagename: com.xxxx.xxxx.common.util * Data: 2018-03-26 10:07 * copyright (c) 2017-2020 XXX Company */package com.gz.medicine.common.util.util; java.io.file; importar java.io.ioException; importar java.sql.time; importar java.util.arrays; importar java.util.date; importar java.util.logging.level; org.dcm4che3.data.ElementDictionary; importar org.dcm4che3.data.fragments; importação org.dcm4che3.data.sequence; importação org.dcm4che3.data.tag; oderg.dcm4Che.data.vrrttions; org.dcm4che3.io.dicominputStream; importar org.dcm4che3.io.dicomoutputStream; importar org.dcm4che3.util.safeclose; import Java.Awt.Image.Raster; Import Java.io.ioxception; importhr1.util.Arts; * @className: DisplayTag * @packagename: com.xxxx.xxxx.common.util * @Description: tag Parsing * @Data: 2018-03-26 10:07 **/public class DisplayTag {private Static Attributes obj = null, object = Null; DicominputStream estático privado; Resultado duplo estático privado; resultado de string privada = nulo; Resultado duplo privado2 = nulo; String privada nom = null; String privada substantivo = nulo; private int val2 = 0; private int valeurreturn; private string domunit = null; Resultado duplo estático privado Facteurdix = 0; Valores duplos privados duplospatial = null; private string domunitratio = null; private DicominputStream Dis; private estático final char [] hex_digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'd', 'e', 'f'}; DicomEncodingOptions privadas de encobrimentos = dicomeCodingOptions.default; elemento estático privado dicty dic = elementDictionary.getStandardElementDictionary (); public DisplayTag (arquivo de arquivo) {try {setObject (loadDicomObject (arquivo)); } catch (ioexception ex) {logger.getLogger (displayTag.class.getName ()). log (Level.severe, null, ex); }} / ** * Leia os metadados do dicom 3.0 * @param f: Arquivo de entrada * @return atributos * @throws ioexception * / public atribuem estático loadDicomObject (arquivo f) lança ioexception {if (f == null) {return null; } else {dicominputStream dis = new DicominputStream (f); //attr.SetSpecificCharacterset("GBK "); retornar dis.readDataset (-1, -1); }} / ** * CUTA atribuição * @param obj * / public void setObject (atributos obj) {this.obj = obj; } / ** * dando atributo de metadados * @return * / public static atributes getObject () {return obj; } / ** * Exibir metadados * @param Arquivo: Inout de arquivo * @THOWSows IoException * / public String readTagdicom (arquivo de arquivo) lança IoException {din = new DicominputStream (arquivo); object = din.readfilemetainformation (); String value = object.toString (); objeto = din.readDataset (-1, -1); valor de retorno; } / ** * PERMET D'Efficher l'heure D'Ene Valeur dicom em padrão internacional yyyy. yyyy.mm.dd else dd.mm.yyyyy * @param valuenoun: "Dot" Mettre la data em formato yyyyy.mm.dd ou dd.mm.yyyyy sinon em formato yyyy mm dd ou dd mm yyyyyd/ "Dot" Putyy.yyyyyyyyyyyyyyyyyyy mm dd ou dd mm yydyd/ "Dot". dd.mm.yyyyy mais a yyyy mm ou dd mm yyyyy * @return aficher le string du tag Selon le Standard International/ Return string Date * @Throws IoException */ public string dicomdate (int tag, tags, boolean valueBool, string content) getObject (). getString (tag); String tagdayfomat = formatdate (tagValue, valueBool, valuenoun); retornar tagdayfomat; } else {return null; }}/ ** * PERMET D'Efficher l'heure d'ne une valeur dicom em padrão internacional yyyy.mm.dd/ permitir exibir um horário em metadados para yyyy.mm.dd * @param objeto * @param tag: valeur du tag/ valor de tag * @param ValueBool: Si TrueM. DD.MM.YYYYY/ IF TRUE FORMATO AA YYYY.MM.DD ELSE DD.MM.YYYYY * @PARAM VALUENOUN: "DOT" METTRE LA DATE EM FORMATO AA YOYYYY.MM.DD OU DD.MM.YYYYY SINON EN FORMAT dd.mm.dd ou dd.mm.yyyy mais yyyy mm ou dd mm yyyy * @return aficher le string du tag Selon le Standard International/ Return string Data * @THOWS IOexception */ public static string dicomdate (objeto de tags, string -string (string TAGDAYFOMAT = formatdate (TagValue, ValueBool, Valuenoun); dd.mm.yyyy else em formato aaaaaaa mm dd ou dd mm yyyyy *@return */public static string formatdate (string numero, boolean valueBool, string valuenoun) {if (numero.matches ("^[0-9] *$")) {/ se la-cadeia StringBuffer (); Valuenoun.equals ("DOT") {R.Append ('.'); "Dot" == NULL: valuenoun.equals ("DOT")) {R.Append ('.'); indexação. A sequência está no índice zero, o próximo no índice um e assim por diante, como a indexação da matriz. @return * / public date getheaderDateValue (string tagnr) {return getheaderDateValue (totagint (tagnr)); * Converte a representação da string de um número de cabeçalho * por exemplo, 0008.0010 para o número inteiro correspondente como 0x00080010 *, conforme usado no @see org.dcm4che2.data.tag * @param headrnr eg 0008,0010 * @return 0x00080010 AS Integer.Parseint (HeadernR.Replaceall (",", ""), 16); Vr = da * @param tagnr: "0000,0010" * @param dicomobj * @return */ public date getheaderDateValue (string tagnr, atributos dicomobj) @return getheaderdateValue (totaGInt (tagnr), dicomobj); textdicom (string num) {num = num.replaceall ("//^+", ""); TagValue = Arrays.asList (TagValue2) .ToString (); TagValue = DisplayTag.ArrayToString (TagValue2, "//"); if (A.Length> 0) {Result.Append (A [0]); Hora * (0008,0032) no tempo de aquisição S * (0008.0033) no tempo de imagem * Tag @param: dando tag * @return * @THOWSows IoException */ public string dicomtime (int tag) tag); FormatNotdot (TagValue); (0008.0033) No tempo de imagem S * @param tag: dando tag * @return * @THOLS IOException */ public String dicomTimetotal (int tag) lança ioexception {if (getObject (). else {return null; * / public string dicomtime2 (objeto atributos, tag int) lança IoException {string tagvalue = object.getString (tag); Permita o tempo de exibição em hh.mm.ss.frac * (0008.0030) no tempo de estudo S * (0008.0031) no tempo da série S * (0008.0032) no tempo de aquisição s * (0008.0033) no string s) @param @param objeto: metadata * @param tag: valor Dicom * -REMURN * objeto, tag int) lança ioexception {string tagvalue = object.getString (tag); getObject (). getint (tagnr, 0); GETHEDERINTEGERGERVALE (TOTAGINT (TAGNR)); ContraSheaderTag (int tagnr) {return getObject (). contém (tagnr); por exemplo, nome dos pacientes */ public string getheadername (string tagnr) {tente {return getheaderName (totaGINT (tagnr)); = getObject (). GetString (TAGNR); .Append ("[") .Append (GetObject (). ||. estático int totagint2 (string headrnr) {return integer.parseint (headernr.replaceall ("," ""), 16); (num.matches ("^0 * $")) {num = ""; <j; {if (numero.matches ("^[0-9].*$")) {stringbuilder r = new Stringbuilder (); R.ToString (); SetfactorpOwer (10,2) // 10^2 * @param Result3 * @param Factor * @return * @return */public static duplo setFacorPower (resultado duplo 3, fator duplo) {Retorno ResultFacordix = Math.Pow (Result3, fator); DCMOBJ * @return */ public static int [] lattricepixeldata (atributos dcmobj) {int [] data = dcmobj.getints (tag.pixeldata); Data = getObject (). getints (tag.pixeldata); dcmobj.getbytes (tag.pixeldata); Pixeldata * @param raster de dicom * @return */private int [] extractdata (raster de raster) {int w = raster.getwidth (); int [] Data = novo int [h] [W]; Data2) {int H = Data2.Length; Tabela de entrada * @param objeto * @param paciente_additional_tags: tabela int * * Exemplo: * public static final int [] tag = {0x00080020, 0x00080022,}; Dis.ReaddicomObject (); : Paciente_addicional_tags) {value [i] = object.getString (tag); Readitem (arquivo de entrada, tag int) {DisplayTag DCM = novo DisplayTag (InputFile); Att.ToString (); DisplayTag (InputFile); RegionPatialFormat * - RegionDatatype * - PhysicalUnitsxDirection * - FísicounitsxDirection * - PixelComponentPhysicalUnits * * * * @param Result: Value string */public void (int tag, string resultante) {if (tag == region.region.regionsPatialFormat) (Val2 = Integer.; Switch (Val2) {Caso 5: SetNounit ("Graphics"); this.setNounUnit ("2D (tecido ou fluxo"); quebra; caso 0: setNoununit ("nenhum ou não aplicável"); quebra; padrão: quebra;}} else if (tag == tag.regiondatyType) {val2 = integer.valueof (resultado) .IntValue (); // conversie em int sextie (switch) Fisiológico (amplitude vs. tempo) "); quebra; caso 11: setNoununit (" d (área)/dt "); quebra; caso 10: setNoununit (" trace de área "); interrupção; case 8: setNounit (" d (volume)/dt trace "); Rastreio "); quebra; caso 6: this.setNounit (" Trace do modo Doppler "); quebra; caso 5: this.setNoununit (" rastreio médio do doppler "); interrupção; case 4: setNounit (" cw espectral specpler "); interrupção; Fluxo "); quebra; caso 1: this.setNoununit (" tecidos "); quebra; caso 0: this.setNounit (" nenhum ou não aplicável "); quebrar; padrão: quebrar;} switch (resultado) {case" a "this.setNunit (" ECG Trace "); quebra; case": thissetnoun "; TODO. == Tag.PhysicalUnitsxdirection || 7: setNounUnit("cm*pixel/sec"); break; case 6: this.setNounUnit("dB*pixel/seconds"); break; case 5: this.setNounUnit("hertz/pixel"); break; case 4: setNounUnit("seconds/pixel"); break; case 3: this.setNounUnit("cm/pixel"); break; case 2: Termo.Tearão o processo de regressão linear. this.setNounit ("cm*cm*cm*pixel/s"); setNounUnit("Computed Border"); break; case 8: setNounUnit("Integrated Backscatter"); br eak; case 7: setNounUnit("Color bar"); break; case 6: this.setNounUnit("Gray bar"); break; case 5: this.setNounUnit("Color Flow Intensity"); break; case 4: setNounUnit("Color Flow Variance"); break; case 3: this.setNounUnit("Color Flow Velocity"); break; case 2: this.setNounUnit("Spectral doppler"); break; case 1: this.setNounUnit("Tissue"); break; case 0: this.setNounUnit("None or not applicable"); break; default: break; } if("A".equals(result)){ this.setNounUnit("Tissue Classificação ");}} else {this.setNounit (" Nenhum ou não aplicável ");}} / ** * EnregistRe l'ité des itens / coloque a unidade de itens * @param Noununit * @return this.NounUnit = Nounit * / public String SetNunit (string nounit) { L'Alité des Items./diving Unidade de itens * @return le n om de l'unité */ public string getNounit () {return onnunit; -PixelComponentPhysicalUnits * * @param Resultado: prend l'nenite */ public void unitratiospatial (tag int, string resultado) {if (tag == tag.physicalunitsxdirection || tag == tag.physicalunitsyDirection || Integer.ValueOf (resultado) .IntValue (); // Convertie en int switch (Val2) {Caso 9: Valores duplospatial1 = getvaleurtagiTemDoubleratio ()* setFacteurPuissance (10,1); Break Case 8: Valores duplos2 = Getvaleurtagitemdoubleratio Atenda -se. thalynunittio (db/pixel "); valorespatial3 = getvaleurtagitemdoubleratio ()*setFacteurpuissance (10,2); SetfactEurpuissance (10,2); Espacial * @param valorespatial * @return */public Double SettagitemDoubleratio (Valores duplos) {return this.valuespatial = valorespatial; valeurs calculater des puissances/ put e potência de computação * @param Result3 * @param FactEur * @return * @return */ public static duplo setFacteurpuissance (duplo resultado3, factheur duplo) @Turt ResultFacteurdix = Math.pow (Result3, FactEur); getfacteurpuissance () {return resultfacteurdix; itens dess items./Giving Unity * @return le nom de l'ité */ public string getNoununitratio () {return Noununitratio; }/ ** * prenda la valeur interne d'un tag item/ cut tag item * @param resultado * @return */ public string SettAgItem (resultado da string) {return this.result = resultado; }/** * Donne la valeur du tag rachercher/dando um valor de tag Seek * @return le string de la valeur rachercher du tag dans itens un item */public string getValeurtagitem () {return resultado; }/ ** * prenda la valeur interne d'un tag Item/ Coloque o valor da tag Itemù * @return */ public duplo se estabelecemdouble (duplo resultado2) {return this.result2 = resultado2; }/** * Donne la valeur du tag rachercher/dando a tag de valor * @return le Double de la Valeur rachercher du tag Dans Item Un Item */public duplo getValeurtagitemDouble () {retornar resultado2; } / ** * lê um valor de string do tag dicom (dcm4che2) * @param tagnr a tag para ler * @return the value como string * retorna o conjunto de caracteres específico definido pelo atributo conjunto de caracteres específico (0008.0005) * deste ou o conjunto de dados de raiz, se este é um conjunto de dados mais acentuado contendo em uma sequência * / string public string, se este é um conjunto de dados de tagn) / elem = getObject (); Elem.SetSpecificcharacterset ("GB18030"); String val = elem.getString (tagnr); if (val == null) {val = ""; } retornar val; } catch (Exceção e) {return ""; }} / ** * lê um valor de string do tag dicom (dcm4che2) * @param tagnr a tag para ler * @return the value como string * retorna o conjunto de caracteres específico definido pelo atributo específico de caracteres (0008.0005) * deste ou o conjunto de dados raiz, se este é um conjunto de dados negado contendo em uma sequência System.out.println (222); Atributos elem = getObject (); Elem.SetSpecificcharacterset ("GB18030"); String [] val = elem.getStrings (tagnr); retornar val; } catch (Exceção e) {return null; }} / ** * lê um valor de string do dicomheader * @param tagnr a tag para ler * @param dcmElement * @returgar o valor como string * / public string getheaderStringValue (atributos dcmElement, int tagnr) {Try {System.out.println (333); /* dcmElement.SetSpecificCharacterset ("ISO_IR 100"); */ dcmElement.SetSpecificCharacterset ("GB18030"); String val = dcmElement.getString (tagnr); if (val == null) {val = ""; } retornar val; } catch (Exceção e) {return ""; }} / ** * lê a tag (grupo, elemento) * @param headernr por exemplo "0018,0050" para obter espessura da fatia <br> * @return string * / public string getheaderstringValue (string headrnr) {headrernr = headrnR.replacEll ("xx", "00"). retornar getheaderstringValue (totaGINT (Headernr)); } / ** * Dando um tempo uma tag ("xxxx,") * @param tagnr * @return * / public time getheadertimeValue (string tagnr) {return getheaderTimeValue (totaGINT (tagnr)); } / ** * Dando um tempo uma tag * @param tagnr * @return time * / public time getheadTimeValue (int tagnr) {string time = getheaderstringValue (tagnr); if (time.length ()! = 6) {return null; } tente {int hour = integer.parseint (time.substring (0,2)); int min = integer.parseint (time.substring (2,4)); int sec = Integer.parseint (time.substring (4,6)); retornar novo horário (hora, min, seg); } catch (Exceção e) {} retornar null; } /** * Recupera um headertag específico que está dentro da tag Anotehr * ou "0008.0102, 0054.0220" para obter o designer do esquema de codificação após a sequência de código de exibição * @return string * * @param taghierarchy; Por exemplo, {tag.uid, tag.sopInstanceUid, tag.codemeaning} * @return */ public string getheaderValueinsideTag (int [] taghierarchy) {try {para (int i = 0; i <taghierarchy.lengngth-1; i ++) {para retorno). }} catch (Exceção e) {string tags = ""; for (int i = 0; i <taghierarchy.length; i ++) {tags += totaGString (taghierarchy [i]) +""; } retornar ""; } retornar nulo; } / ** * Converte a representação int de um número de cabeçalho * por exemplo, 0x00080010 na sequência correspondente 0008.0010 * @return 0008.0010 como string * / public static string toTagString (int tagnr) {return shorttohex (tagnr >> 16) + ',' + shortoHex (tagnr); } public static string shorttohex (int val) {char [] ch = new char [4]; Shorttohex (Val, Ch, 0); retornar nova string (ch); } public static stringbuffer shorttohex (int val, stringbuffer sb) {sb.append (hex_digits [(val >> 12) e 0xf]); sb.append (hex_digits [(val >> 8) e 0xf]); sb.append (hex_digits [(val >> 4) e 0xf]); sb.append (hex_digits [val & 0xf]); retornar sb; } public static void shorttohex (int val, char [] ch, int off) {ch [off] = hex_digits [(val >> 12) e 0xf]; CH [OFF+1] = hex_digits [(Val >> 8) e 0xf]; CH [off+2] = hex_digits [(Val >> 4) e 0xf]; ch [off+3] = hex_digits [val & 0xf]; } / ** * Crie o arquivo em saída dicom * @param fileOutput: saída do arquivo * @throws ioexception * * * Exemplo: * * * * * * / public void writeto (arquivo fileOutput, atributos fmi, atributos) lança IoException {dicomoutstream Dos = dicomoutstream (FILHE FRILHE (FILHE (FILHOTUTTRAME) Dos.setEncodingoptions (encaps); Dos.WritedATASET (FMI, objeto); dos.finish (); Dos.flush (); } / ** * writting * @param fileOutput * @param h * @param w * @throws ioexception * / public void writeTeSement (arquivo fileOutput, int h, int w) lança ioexception {dicomOutstream Dos = new DicomOutstream (novo arquivo (fileOutput +". Dos.setEncodingoptions (encaps); } / ** * Crie sobreposição em pixeldata * @param objeto * / public void sobrevercreate (objeto atributos) {int position = object.getInt (tag.overlaybitposition, 0); if (position == 0) {return; } int bit = 1 << Posição; int [] pixels = object.getInts (tag.pixeldata); int conting = 0; para (int pix: pixels) {int sobrevery = pix & bit; pixels [count ++] = pix - sobreposição; } object.setInt (tag.pixeldata, vr.ow, pixels); } /*** dicom.setstring (tag.performingphysicianName, vr.pn, "jean"); dicom.SetString (tag.adMittingDiagnosesDescription, vr., "chu"); Sequência seq = dicom.newsequence (tag.anatomicregionSequence, 0); Atributos dicom2 = novos atributos (); * @param dicom */ public void SetItem (atributos dicom, int tagSequeName) {sequence seq = dicom.newsequence (tagsequencename, 0); dicom.SetString (tag.codingschemedesignator, vr.sh, "srt"); dicom.SetString (tag.codevalue, vr.sh, "t-aa000"); dicom.SetString (tag.codemeaning, vr., "olho"); seq.add (dicom); } public static void main (string [] args) lança Exceção {arquivo file = new File ("c: // usuários // fendo // documents // wechat arquivos // fen_do // files // 1234.dcm"); DisplayTag d = new DisplayTag (arquivo); @Suppresswarnings ("stict-access") atribui atts = d.loaddicomObject (arquivo); // Saída de todos os informações do atributo System.out.println ("Todas as informações:" + attrs); // obtenha linha int linha = atts.getint (tag.rows, 1); // obtive colunas int colunns = atts.getint (tag.columns, 1); // janela de largura da janela flutuar win_center = atts.getfloat (tag.windowcenter, 1); float win_width = atts.getfloat (tag.windowwidth, 1); System.out.println("" + "row=" + row + ",columns=" + row + ",row*columns = " + row * columns); String patientName = attrs.getString(Tag.PatientName, ""); System.out.println("Name:" + patientName); //Birthday String patientBirthDate = attrs.getString(Tag.PatientBirthDate, ""); System.out.println("Birthday: " + patientBirthDate); //Institution String institution = attrs.getString(Tag.InstitutionName, ""); System.out.println("Institution: " + institution); //Site String station = attrs.getString(Tag.StationName, ""); System.out.println("Site: " + station); //Manufacturer String Manufacturer = attrs.getString(Tag.Manufacturer, ""); System.out.println("Manufacturer: " + Manufacturer); //Manufacturer Model String ManufacturerModelName = attrs.getString(Tag.ManufacturerModelName, ""); System.out.println("ManufacturerModelName: " + ManufacturerModelName); //Description--Atrial String description = attrs.getString(Tag.StudyDescription, ""); System.out.println("Description--Atrial: " + Description); //Description--Specific String SeriesDescription = attrs.getString(Tag.SeriesDescription, ""); System.out.println("Description--Specific: " + SeriesDescription); //Description time String studyData = attrs.getString(Tag.StudyDate, ""); System.out.println("Description time: " + studyData); byte[] bytename = attrs.getBytes(Tag.PatientName); System.out.println("Name: " + new String(bytename,"gb18030")); byte[] bytesex = attrs.getBytes(Tag.PatientSex); System.out.println("Gender: " + new String(bytesex,"gb18030")); }}输出如下:
所有信息: (0008,0005) CS [ISO_IR 100] SpecificCharacterSet
(0008,0008) CS [ORIGINAL/PRIMARY] ImageType
(0008,0016) UI [1.2.840.10008.5.1.4.1.1.1.1] SOPClassUID
(0008,0018) UI [1.2.840.113619.2.203.4.2147483647.1486521160.448521] SOPInstan
(0008,0020) DA [20170208] StudyDate
(0008,0021) DA [20170208] SeriesDate
(0008,0022) DA [20170208] AcquisitionDate
(0008,0023) DA [20170208] ContentDate
(0008,002A) DT [20170208103237.000000] AcquisitionDateTime
(0008,0030) TM [103154.000] StudyTime
(0008,0031) TM [103158.000] SeriesTime
(0008,0032) TM [103237.000] AcquisitionTime
(0008,0033) TM [103240.000] ContentTime
(0008,0050) SH [T77792] AccessionNumber
(0008,0060) CS [DX] Modality
(0008,0068) CS [FOR PRESENTATION] PresentationIntentType
(0008,0070) LO ["GE Healthcare"] Manufacturer
(0008,0080) LO [HeFei RICH] InstitutionName
(0008,0081) ST [Not Initialized
Not Initialized
HeFei
AnHui
Not Initialize(0008,0090) PN [] ReferringPhysicianName
(0008,1010) SH [082407110134] StationName
(0008,1030) LO [ACHEST] StudyDescription
(0008,103E) LO [Chest] SeriesDescription
(0008,1040) LO [Not Initialized] InstitutionalDepartmentName
(0008,1050) PN [] PerformingPhysicianName
(0008,1090) LO ["Definium 6000"] ManufacturerModelName
(0008,1110) SQ [] ReferencedStudySequence
(0008,1120) SQ [] ReferencedPatientSequence
(0008,2112) SQ [1 Items] SourceImageSequence
>Item #1
>(0008,1150) UI [1.2.840.10008.5.1.4.1.1.1.1.1] ReferencedSOPClassUID
>(0008,1155) UI [1.2.840.113619.2.203.4.2147483647.1486521157.927189] Referenc
(0008,2218) SQ [1 Items] AnatomicRegionSequence
>Item #1
>(0008,0100) SH [T-D3000] CodeValue
>(0008,0102) SH [SNM3] CodingSchemeDesignator
>(0008,0104) LO [Chest] CodeMeaning
(0010,0010) PN [zhang^xiao di] PatientName
(0010,0020) LO [T77792] PatientID
(0010,0030) DA [19860618] PatientBirthDate
(0010,0032) TM [] PatientBirthTime
(0010,0040) CS [F] PatientSex
(0010,1010) AS [030Y] PatientAge
(0010,1030) DS [] PatientWeight
(0011,0010) LO [GEMS_GDXE_FALCON_04]
(0011,1003) UI [1.2.840.113619.2.203.4.2147483647.1486521118.562807]
(0011,1004) CS [SE]
(0011,1005) UI [1.2.840.113619.2.203.4.2147483647.1486521152.970120]
(0011,1006) DS [0.083936]
(0011,1009) SL [0]
...
row=2021,columns=2021,row*columns = 4084441
姓名:zhang^xiao di
生日:19860618
机构:HeFei RICH
站点:082407110134
制造商:"GE Healthcare"
制造商模型:"Definium 6000"
描述--心房:ACHEST
描述--具体:Chest
描述时间:20170208
姓名: zhang^xiao di
性别: F
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
Espero que este artigo seja útil para a programação Java de todos.