java中序列化与反序列化_Java中的序列化

java中序列化与反序列化

Java提供了一种称为序列化的机制,以按字节的有序或字节序列的形式持久化Java对象,其中包括对象的数据以及有关对象的类型和存储在对象中的数据类型的信息。 因此,如果我们已序列化了任何对象,则可以使用对象的类型和其他信息对其进行读取和反序列化,以便检索原始对象。

类ObjectInputStream和ObjectOutputStream是高级流,其中包含用于序列化和反序列化对象的方法。 ObjectOutputStream有许多用于序列化对象的方法,但是常用的方法是:

private void writeObject(ObjectOutputStream os) throws IOException{ }

同样,ObjectInputStream具有

private void readObject(ObjectInputStream is) throws IOException, ClassNotFoundException{}

需要序列化吗?

通常在需要通过网络发送数据或存储在文件中时使用序列化。 数据是对象,而不是文本。 现在的问题是您的网络基础结构和硬盘是可以理解位和字节但不能理解Java对象的硬件组件。 序列化是将Java对象的值/状态转换为字节,以便通过网络发送或保存它。反序列化是将字节码转换为相应的Java对象。

serialVersionUID的概念:

SerialVersionUID用于确保在反序列化期间加载相同的对象(在序列化期间使用的对象)。serialVersionUID用于对象的版本控制。您可以在java序列化中的serialVersionUID上内容

对于序列化:

步骤如下:

让我们举个例子:在src-> org.arpit.javapostsforlearning中创建Employee.java:

1,Employee.java

package org.arpit.javapostsforlearning;
import java.io.Serializable;
public class Employee implements Serializable{int employeeId;String employeeName;String department;public int getEmployeeId() {return employeeId;}public void setEmployeeId(int employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}
}

从上面可以看到,如果要序列化任何类,则它必须实现Serializable接口(即标记接口)。

Java中的标记接口是没有字段或方法的接口,或者简单的单词空接口在Java中称为标记接口。 在src-> org.arpit.javapostsforlearning中创建SerializeMain.java

2. SerializeMain.java

package org.arpit.javapostsforlearning;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class SerializeMain {/*** @author Arpit Mandliya*/public static void main(String[] args) {Employee emp = new Employee();emp.setEmployeeId(101);emp.setEmployeeName('Arpit');emp.setDepartment('CS');try{FileOutputStream fileOut = new FileOutputStream('employee.ser');ObjectOutputStream outStream = new ObjectOutputStream(fileOut);outStream.writeObject(emp);outStream.close();fileOut.close();}catch(IOException i){i.printStackTrace();}}
}

对于反序列化:

步骤如下:

在src-> org.arpit.javapostsforlearning中创建DeserializeMain.java

3.DeserializeMain.java

package org.arpit.javapostsforlearning;
import java.io.IOException;
import java.io.ObjectInputStream;public class DeserializeMain {/*** @author Arpit Mandliya*/public static void main(String[] args) {Employee emp = null;try{FileInputStream fileIn =new FileInputStream('employee.ser');ObjectInputStream in = new ObjectInputStream(fileIn);emp = (Employee) in.readObject();in.close();fileIn.close();}catch(IOException i){i.printStackTrace();return;}catch(ClassNotFoundException c){System.out.println('Employee class not found');c.printStackTrace();return;}System.out.println('Deserialized Employee...');System.out.println('Emp id: ' + emp.getEmployeeId());System.out.println('Name: ' + emp.getEmployeeName());System.out.println('Department: ' + emp.getDepartment());}
}

4,运行它

首先运行SerializeMain.java,然后运行DeserializeMain.java,您将获得以下输出:

Deserialized Employee...
Emp id: 101
Name: Arpit
Department: CS

因此,我们先序列化了一个雇员对象,然后对其进行反序列化。这看起来很简单,但是当引用对象,继承关系出现时,它可能会非常复杂。因此,我们将逐一介绍不同的情况以及如何在不同的情况下应用序列化。

情况1-如果一个对象引用了其他对象怎么办

我们已经看到了非常简单的序列化案例,现在如果它也引用了其他对象又该怎么办呢?它将如何序列化呢? 是的,您不必显式地序列化引用对象。当序列化任何对象并且如果它包含任何其他对象引用时,Java序列化将序列化该对象的整个对象图。

例如:让我们说,Employee现在引用了地址对象,而Address可以引用了其他某个对象(例如Home),那么当您序列化Employee对象时,所有其他引用对象(例如address和home)都将自动序列化。 让我们创建Address类并添加Address对象作为对上述雇员类的引用。

Employee.java:

package org.arpit.javapostsforlearning;
import java.io.Serializable;public class Employee implements Serializable{int employeeId;String employeeName;String department;Address address;public int getEmployeeId() {return employeeId;}public void setEmployeeId(int employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}
}

在org.arpit.javapostsforlearning中创建Address.java:

地址.java:

package org.arpit.javapostsforlearning;
public class Address {int homeNo;String street;String city;public Address(int homeNo, String street, String city) {super();this.homeNo = homeNo;this.street = street;this.city = city;}public int getHomeNo() {return homeNo;}public void setHomeNo(int homeNo) {this.homeNo = homeNo;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}
}

在org.arpit.javaposts学习中创建SerializeDeserializeMain.java:

SerializeDeserializeMain.java:
package org.arpit.javapostsforlearning;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;public class SerializeDeserializeMain {/*** @author Arpit Mandliya*/public static void main(String[] args) {Employee emp = new Employee();emp.setEmployeeId(101);emp.setEmployeeName('Arpit');emp.setDepartment('CS');Address address=new Address(88,'MG road','Pune');emp.setAddress(address);//Serializetry{FileOutputStream fileOut = new FileOutputStream('employee.ser');ObjectOutputStream outStream = new ObjectOutputStream(fileOut);outStream.writeObject(emp);outStream.close();fileOut.close();}catch(IOException i){i.printStackTrace();}//Deserializeemp = null;try{FileInputStream fileIn =new FileInputStream('employee.ser');ObjectInputStream in = new ObjectInputStream(fileIn);emp = (Employee) in.readObject();in.close();fileIn.close();}catch(IOException i){i.printStackTrace();return;}catch(ClassNotFoundException c){System.out.println('Employee class not found');c.printStackTrace();return;}System.out.println('Deserialized Employee...');System.out.println('Emp id: ' + emp.getEmployeeId());System.out.println('Name: ' + emp.getEmployeeName());System.out.println('Department: ' + emp.getDepartment());address=emp.getAddress();System.out.println('City :'+address.getCity());}
}

运行 :

运行SerializeDeserializeMain.java时,将获得以下输出:

java.io.NotSerializableException: org.arpit.javapostsforlearning.Addressat java.io.ObjectOutputStream.writeObject0(Unknown Source)at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)at java.io.ObjectOutputStream.writeSerialData(Unknown Source)at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)at java.io.ObjectOutputStream.writeObject0(Unknown Source)at java.io.ObjectOutputStream.writeObject(Unknown Source)

我们错了,出了什么问题。我忘了提,Address类也必须是可序列化的。因此,您必须通过实现serialzable接口使Address序列化。

地址.java:

import java.io.Serializable;public class Address implements Serializable{int homeNo;String street;String city;public Address(int homeNo, String street, String city) {super();this.homeNo = homeNo;this.street = street;this.city = city;} public int getHomeNo() {return homeNo;}public void setHomeNo(int homeNo) {this.homeNo = homeNo;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}
}

再次运行:

再次运行SerializeDeserializeMain.java时,将获得以下输出:

Deserialized Employee...  
Emp id: 101  
Name: Arpit  
Department: CS  
City: Pune

情况2:如果您无权访问引用对象的源代码(例如,您无权访问上述Address类)该怎么办?

如果您没有访问地址类的权限,那么如何在地址类中实现可序列化的接口呢? 是的,您可以创建另一个扩展地址并使其可序列化的类,但是在许多情况下它可能会失败:

  • 如果将类声明为final怎么办
  • 如果类引用其他不可序列化的对象该怎么办。

那么,您将如何序列化Employee对象? 所以解决方案是您可以使其瞬态。如果您不想序列化任何字段,请使其瞬态。

transient Address address

因此,在运行程序时在Employee类中使地址瞬态之后,您将获得nullPointerException,因为在反序列化期间地址引用将为null

情况3:如果您仍要保存引用对象的状态(例如,地址对象上方),该怎么办:

如果您使地址处于瞬态状态,那么在反序列化期间它将返回null。但是如果您仍然希望与序列化地址对象时的状态相同,那么Java序列化提供了一种机制,如果您具有带有特定签名的私有方法,则它们将获得在序列化和反序列化过程中被调用,因此我们将覆盖employee类的writeObject和readObject方法,它们将在Employee对象的序列化和反序列化过程中被调用。

Employee.java:

package org.arpit.javapostsforlearning;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class Employee implements Serializable{int employeeId;String employeeName;String department;transient Address address;public int getEmployeeId() {return employeeId;}public void setEmployeeId(int employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}private void writeObject(ObjectOutputStream os) throws IOException, ClassNotFoundException{ try {os.defaultWriteObject();os.writeInt(address.getHomeNo());os.writeObject(address.getStreet());os.writeObject(address.getCity());} catch (Exception e) { e.printStackTrace(); }}private void readObject(ObjectInputStream is) throws IOException, ClassNotFoundException{try {is.defaultReadObject();int homeNo=is.readInt();String street=(String) is.readObject();String city=(String) is.readObject();address=new Address(homeNo,street,city);} catch (Exception e) { e.printStackTrace(); }}
}

应该记住的一点是,ObjectInputStream应该以我们将数据写入ObjectOutputStream的相同顺序读取数据。 在org.arpit.javapostsforlearning中创建Address.java:

地址.java:

package org.arpit.javapostsforlearning;
import java.io.Serializable;public class Address {int homeNo;String street;String city;public Address(int homeNo, String street, String city) {super();this.homeNo = homeNo;this.street = street;this.city = city;}public int getHomeNo() {return homeNo;}public void setHomeNo(int homeNo) {this.homeNo = homeNo;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}
}

在org.arpit.javaposts学习中创建SerializeDeserializeMain.java:

SerializeDeserializeMain.java:

package org.arpit.javapostsforlearning;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;public class SerializeDeserializeMain {/*** @author Arpit Mandliya*/public static void main(String[] args) {Employee emp = new Employee();emp.setEmployeeId(101);emp.setEmployeeName('Arpit');emp.setDepartment('CS');Address address=new Address(88,'MG road','Pune');emp.setAddress(address);//Serializetry{FileOutputStream fileOut = new FileOutputStream('employee.ser');ObjectOutputStream outStream = new ObjectOutputStream(fileOut);outStream.writeObject(emp);outStream.close();fileOut.close();}catch(IOException i){i.printStackTrace();}//Deserializeemp = null;try{FileInputStream fileIn =new FileInputStream('employee.ser');ObjectInputStream in = new ObjectInputStream(fileIn);emp = (Employee) in.readObject();in.close();fileIn.close();}catch(IOException i){i.printStackTrace();return;}catch(ClassNotFoundException c){System.out.println('Employee class not found');c.printStackTrace();return;}System.out.println('Deserialized Employee...');System.out.println('Emp id: ' + emp.getEmployeeId());System.out.println('Name: ' + emp.getEmployeeName());System.out.println('Department: ' + emp.getDepartment());address=emp.getAddress();System.out.println('City :'+address.getCity());}
}

运行 :

运行SerializeDeserializeMain.java时,将获得以下输出:

Deserialized Employee...
Emp id: 101
Name: Arpit
Department: CS
City :Pune

所以现在我们得到的地址对象的状态与序列化之前的状态相同。

序列化中的继承:

现在我们将了解继承如何影响序列化,因此在某些情况下,超类是否可序列化是可能的,如果不是,那么您将如何处理它以及它如何工作。 我们将创建Person.java,它将是Employee的超类:

情况4:如果超类是可序列化的怎么办?

如果超类是可序列化的,则其所有子类都可以自动序列化。

情况5:如果超类不可序列化怎么办?

如果超类不能序列化,那么我们必须以完全不同的方式处理它。

  • 如果超类不可序列化,则它必须没有参数构造函数。

人.java

package org.arpit.javapostsforlearning;
public class Person {String name='default';String nationality;public Person(){System.out.println('Person:Constructor');}public Person(String name, String nationality) {super();this.name = name;this.nationality = nationality;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNationality() {return nationality;}public void setNationality(String nationality) {this.nationality = nationality;}}

在org.arpit.javapostsforlearning中创建Employee.java:

Employee.java:

package org.arpit.javapostsforlearning;
import java.io.Serializable;public class Employee extends Person implements Serializable{int employeeId;String department;public Employee(int employeeId,String name,String department,String nationality){super(name,nationality);this.employeeId=employeeId;this.department=department;System.out.println('Employee:Constructor');}public int getEmployeeId() {return employeeId;}public void setEmployeeId(int employeeId) {this.employeeId = employeeId;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}
}

在org.arpit.javaposts学习中创建SerializeDeserializeMain.java:

SerializeDeserializeMain.java:

package org.arpit.javapostsforlearning;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;public class SerializeDeserializeMain {/*** @author Arpit Mandliya*/public static void main(String[] args) {//SerializeEmployee emp = new Employee(101,'Arpit','CS','Indian');System.out.println('Before serializing');System.out.println('Emp id: ' + emp.getEmployeeId());System.out.println('Name: ' + emp.getName());System.out.println('Department: ' + emp.getDepartment());System.out.println('Nationality: ' + emp.getNationality());System.out.println('************');System.out.println('Serializing');try{FileOutputStream fileOut = new FileOutputStream('employee.ser');ObjectOutputStream outStream = new ObjectOutputStream(fileOut);outStream.writeObject(emp);outStream.close();fileOut.close();}catch(IOException i){i.printStackTrace();}//DeserializeSystem.out.println('************');System.out.println('Deserializing');emp = null;try{FileInputStream fileIn =new FileInputStream('employee.ser');ObjectInputStream in = new ObjectInputStream(fileIn);emp = (Employee) in.readObject();in.close();fileIn.close();}catch(IOException i){i.printStackTrace();return;}catch(ClassNotFoundException c){System.out.println('Employee class not found');c.printStackTrace();return;}System.out.println('After serializing');System.out.println('Emp id: ' + emp.getEmployeeId());System.out.println('Name: ' + emp.getName());System.out.println('Department: ' + emp.getDepartment());System.out.println('Nationality: ' + emp.getNationality());}
}

运行 :

运行SerializeDeserializeMain.java时,将获得以下输出:

如果超类不可序列化,则在反序列化过程中,将通过调用Non-Serializable超类的构造函数来初始化从超类继承的实例变量的所有值。 因此,这里name是从person继承的,因此在反序列化期间,name会初始化为默认值。

情况6-如果超类可序列化但您不希望子类可序列化怎么办

如果您不希望子类可序列化,则需要实现writeObject()和readObject()方法,并且需要从该方法中抛出NotSerializableException。

情况7-您可以序列化静态变量吗?

不,您不能这样做。您知道静态变量是在类级别而不是对象级别,并且您序列化了一个对象,因此您无法序列化静态变量。

摘要:

  • 序列化是将Java对象的值/状态转换为字节,以便通过网络发送或保存它。反序列化是将字节码转换为相应的Java对象。
  • 关于序列化的好处是,整个过程是与JVM无关的,这意味着可以在一个平台上序列化对象,并在完全不同的平台上反序列化对象。\
  • 如果要序列化任何类,则它必须实现Serializable接口,该接口是标记接口。
  • Java中的标记接口是没有字段或方法的接口,或者简单的单词空接口在Java中称为标记接口
  • serialVersionUID用于确保在反序列化期间加载相同的对象(在序列化过程中使用的对象)。serialVersionUID用于对象的版本控制。
  • 当序列化任何对象并且如果它包含任何其他对象引用时,Java序列化将序列化该对象的整个对象图。
  • 如果您不想序列化任何字段,请使其为临时字段。
  • 如果超类是可序列化的,则其子类将自动可序列化。
  • 如果超类不可序列化,则在反序列化过程中,将通过调用Non-Serializable超类的构造函数来初始化从超类继承的实例变量的所有值。
  • 如果您不希望子类可序列化,则需要实现writeObject()和readObject()方法,并且需要从该方法中抛出NotSerializableException。
  • 您不能序列化静态变量。

参考:来自JCG合作伙伴 Arpit Mandliya的Java 序列化, 适用于初学者博客的Java框架和设计模式 。

翻译自: https://www.javacodegeeks.com/2013/03/serialization-in-java.html

java中序列化与反序列化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java命令行界面(第3部分):jbock

在本系列中有关使用Java进行命令行分析的前两篇文章中,我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中,我将介绍jbock ,它是自我描述的“非常简单的CLI解析器”。 我在Java中进行命令行解析的文章使用了一些示例&#xff0…

java collection详解_java 7 collection 详解(一)

一、综述java集合框架定义了几个接口,这些接口决定了collection类的基本特性。不同的是,具体类仅仅是提供了标准接口的不同实现,如图,java集合框架接口图从图可知,java集合类的主要是由两个接口派生而出——Collection…

jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择

jsf tree组件这篇博客文章起源于一个大型Web应用程序中的性能问题。 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码。 奇怪,因为在客户端有很多改进的空间。 我会说,甚至比服务器端还要多。 我们将分析可编辑的JSF标准组件&#…

如何在Java中转义JSON字符串-Eclipse IDE技巧

在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON。 这是测试和学习Java中解析JSON字符串的最快方法,但是这种方法的主要问题…

spring javafx_带有Spring的JavaFX 2

spring javafx我将从一个大胆的声明开始:我一直很喜欢Java Swing或applet。 在那里,我说了。 如果我进行一些自我分析,那么这种钦佩可能是在我接触Java时开始的。 Swing(实际上)是我使用Java所做的第一件事&#xff0c…

jframe和mysql登陆_刚写的一个从数据库读取账户和密码进行登陆的小程序~高手请无~...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.*; import javax.swing.*;public class LoginSystem extends JFrame{publi…

mycat mysql 物理部署_一、MyCat的搭建

一、什么是mycat简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库。mycat是个中间件,它负责连接管理mysql,应用程序连接mycat,把mycat当作…

Apache Camel中的短重试与长重试

《骆驼设计模式》一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践。 每个模式都基于真实的用例,并提供了Camel特定的实现细节和最佳实践。 为了让您有这本书的感觉,以下是该书的重试模式摘录,其中介绍了如…

java实现驾校考试系统_jsp驾校考试系统

本驾校考试系统采用了Browser/Server体系结构,JSP(Java Server Page)作为前台开发工具,MySQL作为后台数据库进行开发。最终系统实现的系统将分为管理员和学员两个角色,其中系统管理员部分的主要功能包括修改登录密码、学员信息管理、科目1题目…

java qlv转mp4 代码_怎么将qlv格式转换成mp4?教你快速转换视频格式的技巧

如何将qlv格式转换成mp4?众所周知qlv格式是腾讯视频的下载格式,而qlv格式的特点在于不能用别的播放器打开。如果用腾讯视频以外的播放器打开则需要将qlv格式转换成mp4,那你知道将qlv格式转换成mp4的技巧吗?下面小编教你一种转换qlv格式的技巧…

mysql导入竖杠分割的数据_MYSQL :逗号分隔串表,分解成竖表

DROP TEMPORARY TABLE IF EXISTS Temp_Num ;CREATE TEMPORARY TABLE Temp_Num ( xh INT PRIMARY KEY ); -- 创建数字辅助表SET i 0;INSERT INTO Temp_Num(xh) -- 写入数字辅助表SELECT i : i1FROM AdDataCenter.Ad_Targeting_Mobisage aLIMIT 0, 100 ;SELECT b.AdGroupID , SU…

浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题

题目链接 引用自晴神OJA - 边覆盖B - 极大独立集C - 稳定婚姻问题D - 笛卡尔树没赶得上全程的比赛,就做了两道,后面两道以后有时间再补。两道都是概念题,比较基础~ 以下是题解A - 边覆盖Case Time Limit: 200 MS (Others) / 400 MS (Java) …

hadoop小型集群_小型Hadoop集群的Ganglia配置和一些故障排除

hadoop小型集群Ganglia是一个针对大型集群的开源,可扩展且分布式的监视系统。 它收集,汇总并提供数十种与计算机相关的指标(例如CPU,内存,存储,网络使用情况)的时序视图。 您可以在UC Berkeley …

spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建

spring aop组件以下文章将显示在我参与的一个项目中,我们如何使用Spring的AOP来介绍一些与安全性相关的功能。 这样的概念是,为了使用户能够看到某些UI组件,他需要具有一定级别的安全特权。 如果不满足该要求,则不会显示UICompone…

使用Spring Boot构建RESTFul服务

每个人都在谈论微服务,例如WSO2微服务框架 , Spring Boot等。由于我已经很长时间没有从事任何与Spring相关的项目了,所以我想到了使用Spring Boot实现一个简单的RESTFul服务。 因此,我从Spring文档开始。 这很简单。 您可以使用“…

将Swagger与Spring Boot REST API集成

在上一篇文章中,我谈到了我使用Spring Boot创建RESTFul Services的经验。 在创建REST API时,正确的文档是其中的必需部分。 昂首阔步是什么? Swagger (Swagger 2)是用于描述和记录REST API的规范。 它指定了REST Web…

php滴滴平台接口,图片服务API文档

简介滴滴云图片服务API提供标准的轻量级无状态HTTP接口,支持用户对数据的全方位管理。接口概览API描述图片信息获取文件的基本信息,包括长度、宽度、文件大小、格式。图片旋转将图片按顺时针旋转。图片模糊对图片进行模糊操作。图片缩放将图片缩小或者放…

java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)

JSP九大内置对象JSP内置对象是Web容器创建的一组对象,不使用new关键就可以使用的内置对象。int[] value{60,70,80};for(int i:value){out.println(i);}%>Web程序的请求响应模式用户发送请求(request)服务器给用户响应(response)out对象:out对象是JspW…

java中接口文件创建_功能接口简介–在Java 8中重新创建的概念

java中接口文件创建世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.Comparator,java.util.concurrent.Callable。 声明的接口之间有一些共同的特征&#xff0c…

Java命令行界面(第12部分):CLAJR

第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 (CLAJR)。 该“库”是单个Java源文件( CLAJR-0.9.java ), 可从SourceForge下载 。 CLAJR的主页当前显示2006年版权日期&#xff…