java.lang.Object java.awt.datatransfer.DataFlavor
public class DataFlavor
DataFlavor
提供有关数据的元信息。DataFlavor
通常用于访问剪切板上的数据,或者在执行拖放操作时使用。
DataFlavor
实例封装 RFC 2045 和 RFC 2046 中定义的内容类型。内容类型通常被称为 MIME 类型。
内容类型由媒体类型(被称为基本类型)、子类型和可选参数组成。关于 MIME 类型的语法的详细信息,请参阅 RFC 2045。
JRE 数据传输实现将 MIME 类型的参数 "class" 解释为一个表示形式类。表示形式类反映将被传输的对象的类。换句话说,表示形式类是由 Transferable.getTransferData(java.awt.datatransfer.DataFlavor)
返回的对象的类型。例如,imageFlavor
的 MIME 类型是 "image/x-java-image;class=java.awt.Image"
,基本类型是 image
,子类型是 x-java-image
,表示形式类是 java.awt.Image
。当调用 getTransferData
,且 DataFlavor
为 imageFlavor
时,返回 java.awt.Image
的实例。要重点注意的是,DataFlavor
不会依据表示形式类进行任何错误检查。由 DataFlavor
的使用者(如 Transferable
)决定是否遵守表示形式类。
注意,如果在创建 DataFlavor
时没有指定表示形式类,则使用默认表示形式类。有关 DataFlavor
的构造方法,请参阅适当的文档。
此外,具有 "text" 基本 MIME 类型的 DataFlavor
实例可能有一个 "charset" 参数。有关 "text" MIME 类型和 "charset" 参数的详细信息,请参阅 RFC 2046 和 selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])
。
DataFlavors
的相等性由基本类型、子类型和表示形式类决定。有关详细信息,请参阅 equals(DataFlavor)
。在确定相等性时,所有可选参数都被忽略。例如,以下代码产生的两个 DataFlavors
被认为是相等的:
DataFlavor flavor1 = new DataFlavor(Object.class, "X-test/test; class=<java.lang.Object>; foo=bar"); DataFlavor flavor2 = new DataFlavor(Object.class, "X-test/test; class=<java.lang.Object>; x=y"); // The following returns true. flavor1.equals(flavor2);正如上面提到的那样,
flavor1
和
flavor2
被认为是相等的。同样地,请求
Transferable
或
DataFlavor
将返回相同的结果。
有关在 Swing 中使用数据传输的更多信息,请参阅 Java Tutorial 中的 How to Use Drag and Drop and Data Transfer 一节。
字段摘要 | |
---|---|
static DataFlavor |
imageFlavor DataFlavor 表示 Java Image 类,其中: |
static DataFlavor |
javaFileListFlavor 要将文件列表传入 Java(及底层平台)或从中传出,需要使用此类型/子类型的 DataFlavor 和 java.util.List 的表示形式类。 |
static String |
javaJVMLocalObjectMimeType 要将一个引用传输到不具有关联 MIME Content 类型的任意 Java 对象引用(跨越同一 JVM 中的 Transferable 接口),需要使用具有此类型/子类型的 DataFlavor ,其中 representationClass 等于跨越 Transferable 传递的类/接口的类型。 |
static String |
javaRemoteObjectMimeType 为了通过拖放 ACTION_LINK 操作将活动链接传递到 Remote 对象,应该使用 Mime Content 类型的 application/x-java-remote-object,其中 DataFlavor 的表示形式类表示要传输的 Remote 接口的类型。 |
static String |
javaSerializedObjectMimeType MIME Content 类型的 application/x-java-serialized-object 表示已变得持久的 Java 对象的图形。 |
static DataFlavor |
plainTextFlavor 已过时。 从 1.3 开始。使用 DataFlavor.getReaderForText(Transferable) 代替 Transferable.getTransferData(DataFlavor.plainTextFlavor) 。 |
static DataFlavor |
stringFlavor DataFlavor 表示 Java Unicode String 类,其中: |
构造方法摘要 | |
---|---|
DataFlavor() 构造一个新的 DataFlavor 。 |
|
DataFlavor(Class<?> representationClass, String humanPresentableName) 构造一个表示 Java 类的 DataFlavor 。 |
|
DataFlavor(String mimeType) 根据 mimeType 字符串构造 DataFlavor 。 |
|
DataFlavor(String mimeType, String humanPresentableName) 构造一个表示 MimeType 的 DataFlavor 。 |
|
DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader) 构造一个表示 MimeType 的 DataFlavor 。 |
方法摘要 | |
---|---|
Object |
clone() 返回此 DataFlavor 的副本。 |
boolean |
equals(DataFlavor that) 测试 DataFlavor 与此 DataFlavor 的相等性。 |
boolean |
equals(Object o) 测试任意 Object 与此 DataFlavor 的相等性。 |
boolean |
equals(String s) 已过时。 与 hashCode() 协定不一致,使用 isMimeTypeEqual(String) 代替。 |
Class<?> |
getDefaultRepresentationClass() |
String |
getDefaultRepresentationClassAsString() |
String |
getHumanPresentableName() 返回此 DataFlavor 表示的数据格式的得体的名称。 |
String |
getMimeType() 返回此 DataFlavor 的 MIME 类型字符串。 |
String |
getParameter(String paramName) 如果 paramName 等于 "humanPresentableName",则返回此 DataFlavor 的得体的名称。 |
String |
getPrimaryType() 返回此 DataFlavor 的基本 MIME 类型。 |
Reader |
getReaderForText(Transferable transferable) 获取文本 flavor 的 Reader,如果需要,则为期望的 charset(编码的)解码。 |
Class<?> |
getRepresentationClass() 返回请求此 DataFlavor 时,支持此 DataFlavor 的对象将返回的 Class 。 |
String |
getSubType() 返回此 DataFlavor 的子 MIME 类型。 |
static DataFlavor |
getTextPlainUnicodeFlavor() 返回表示具有 Unicode 编码的纯文本的 DataFlavor ,其中: representationClass = java.io.InputStream mimeType = "text/plain; charset=<platform default Unicode encoding>" Sun 的 Microsoft Windows 实现使用编码 utf-16le 。 |
int |
hashCode() 返回此 DataFlavor 的哈希码。 |
boolean |
isFlavorJavaFileListType() 如果指定的 DataFlavor 表示 File 对象列表,则返回 true。 |
boolean |
isFlavorRemoteObjectType() 如果指定的 DataFlavor 表示远程对象,则返回 true。 |
boolean |
isFlavorSerializedObjectType() 如果指定的 DataFlavor 表示序列化对象,则返回 true。 |
boolean |
isFlavorTextType() 返回此 DataFlavor 是否是 Java 平台此实现的有效文本 flavor。 |
boolean |
isMimeTypeEqual(DataFlavor dataFlavor) 比较两个 DataFlavor 对象的 mimeType 。 |
boolean |
isMimeTypeEqual(String mimeType) 返回传入的 MIME 类型的字符串表示形式是否等于此 DataFlavor 的 MIME 类型。 |
boolean |
isMimeTypeSerializedObject() DataFlavor 是否表示序列化对象? |
boolean |
isRepresentationClassByteBuffer() 返回此 DataFlavor 的表示形式类是 java.nio.ByteBuffer 还是其子类。 |
boolean |
isRepresentationClassCharBuffer() 返回此 DataFlavor 的表示形式类是 java.nio.CharBuffer 还是其子类。 |
boolean |
isRepresentationClassInputStream() DataFlavor 是否表示 java.io.InputStream ? |
boolean |
isRepresentationClassReader() 返回此 DataFlavor 的表示形式类是 java.io.Reader 还是其子类。 |
boolean |
isRepresentationClassRemote() 如果表示形式类为 Remote ,则返回 true。 |
boolean |
isRepresentationClassSerializable() 如果表示形式类可序列化,则返回 true。 |
boolean |
match(DataFlavor that) 测试 DataFlavor 与此 DataFlavor 的相等性。 |
protected String |
normalizeMimeType(String mimeType) 已过时。 |
protected String |
normalizeMimeTypeParameter(String parameterName, String parameterValue) 已过时。 |
void |
readExternal(ObjectInput is) 根据 Serialized 状态还原此 DataFlavor 。 |
static DataFlavor |
selectBestTextFlavor(DataFlavor[] availableFlavors) 从 DataFlavor 数组中选择最佳文本 DataFlavor 。 |
void |
setHumanPresentableName(String humanPresentableName) 设置此 DataFlavor 表示的数据格式的得体的名称。 |
String |
toString() 此 DataFlavor 及其参数的字符串表示形式。 |
protected static Class<?> |
tryToLoadClass(String className, ClassLoader fallback) 试图从以下位置加载类:引导加载器、系统加载器、上下文加载器(如果存在)和指定的最终加载器。 |
void |
writeExternal(ObjectOutput os) 序列化此 DataFlavor 。 |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final DataFlavor stringFlavor
DataFlavor
表示 Java Unicode String 类,其中:
representationClass = java.lang.String mimeType = "application/x-java-serialized-object"
public static final DataFlavor imageFlavor
DataFlavor
表示 Java Image 类,其中:
representationClass = java.awt.Image mimeType = "image/x-java-image"
@Deprecated public static final DataFlavor plainTextFlavor
DataFlavor.getReaderForText(Transferable)
代替 Transferable.getTransferData(DataFlavor.plainTextFlavor)
。
DataFlavor
表示使用 Unicode 编码的纯文本,其中:
representationClass = InputStream mimeType = "text/plain; charset=unicode"此
DataFlavor
已
过时,因为 (1) 其表示形式为 InputStream,一个基于 8 位的表示形式,而 Unicode 是一个 16 位的字符集;(2) charset "unicode" 意义不明确。"unicode" 意味着特定平台的 Unicode 实现,而不是跨平台的实现。
public static final String javaSerializedObjectMimeType
DataFlavor
关联的表示形式类可以标识对象的 Java 类型,这里的对象指调用
java.awt.datatransfer.getTransferData
时作为引用返回的对象。
public static final DataFlavor javaFileListFlavor
DataFlavor
和
java.util.List
的表示形式类。要求/保证列表的每个元素都是
java.io.File
类型。
public static final String javaJVMLocalObjectMimeType
Transferable
接口),需要使用具有此类型/子类型的
DataFlavor
,其中
representationClass
等于跨越
Transferable
传递的类/接口的类型。
对于具有此 MIME Content 类型的 DataFlavor
,从 Transferable.getTransferData
返回的对象引用必须是 DataFlavor
的表示形式类的实例。
public static final String javaRemoteObjectMimeType
ACTION_LINK
操作将活动链接传递到 Remote 对象,应该使用 Mime Content 类型的 application/x-java-remote-object,其中
DataFlavor
的表示形式类表示要传输的
Remote
接口的类型。
构造方法详细信息 |
---|
public DataFlavor()
DataFlavor
。提供此构造方法的目的只是为了支持
Externalizable
接口。它不用于公共(客户端)用途。
public DataFlavor(Class<?> representationClass, String humanPresentableName)
DataFlavor
。
返回的 DataFlavor
将具有以下特征:
representationClass = representationClass mimeType = application/x-java-serialized-object
representationClass
- 用于在此 flavor 中传输数据的类
humanPresentableName
- 用于标识此 flavor 的可读字符串;如果此参数为
null
,则使用 MIME Content 类型的值
NullPointerException
- 如果
representationClass
为 null
public DataFlavor(String mimeType, String humanPresentableName)
MimeType
的
DataFlavor
。
返回的 DataFlavor
将具有以下特征:
如果 mimeType
为 "application/x-java-serialized-object; class=<representation class>",则结果与调用 new DataFlavor(Class:forName(<representation class>)
相同。
否则:
representationClass = InputStream mimeType = mimeType
mimeType
- 用于标识此 flavor 的 MIME 类型的字符串;如果
mimeType
没有指定 "class=" 参数,或者没有成功地加载类,则抛出
IllegalArgumentException
humanPresentableName
- 用于标识此 flavor 的可读字符串;如果此参数为
null
,则使用 MIME Content 类型的值
IllegalArgumentException
- 如果
mimeType
无效或者没有成功加载类
NullPointerException
- 如果
mimeType
为 null
public DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader) throws ClassNotFoundException
MimeType
的
DataFlavor
。
返回的 DataFlavor
将具有以下特征:
如果 mimeType 为 "application/x-java-serialized-object; class=<representation class>",则结果与调用 new DataFlavor(Class:forName(<representation class>)
相同。
否则:
representationClass = InputStream mimeType = mimeType
mimeType
- 用于标识此 flavor 的 MIME 类型的字符串
humanPresentableName
- 用于标识此 flavor 的可读字符串
classLoader
- 要使用的类加载器
ClassNotFoundException
- 如果没有加载类
IllegalArgumentException
- 如果
mimeType
无效
NullPointerException
- 如果
mimeType
为 null
public DataFlavor(String mimeType) throws ClassNotFoundException
mimeType
字符串构造
DataFlavor
。该字符串可以指定 "class=
DataFlavor
。如果字符串不包含 "class=" 参数,则使用
java.io.InputStream
作为默认值。
mimeType
- 用于标识此 flavor 的 MIME 类型的字符串;如果没有成功加载 "class=" 参数指定的类,则抛出
ClassNotFoundException
ClassNotFoundException
- 如果没有加载类
IllegalArgumentException
- 如果
mimeType
无效
NullPointerException
- 如果
mimeType
为 null
方法详细信息 |
---|
protected static final Class<?> tryToLoadClass(String className, ClassLoader fallback) throws ClassNotFoundException
className
- 要加载的类的名称
fallback
- 回退加载器
ClassNotFoundException
- 如果未找到类
public String toString()
DataFlavor
及其参数的字符串表示形式。得到的
String
包含
DataFlavor
类的名称、此 flavor 的 MIME 类型及其表示形式类。如果此 flavor 具有 "text" 的基本 MIME 类型、支持 charset 参数并且具有编码的表示形式,则还包括 flavor 的 charset。有关支持 charset 参数的文本 flavor 列表,请参阅
selectBestTextFlavor
。
DataFlavor
的字符串表示形式
selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])
public static final DataFlavor getTextPlainUnicodeFlavor()
DataFlavor
,其中:
representationClass = java.io.InputStream mimeType = "text/plain; charset=<platform default Unicode encoding>"Sun 的 Microsoft Windows 实现使用编码
utf-16le
。Sun 的 Solaris 和 Linux 实现使用编码
iso-10646-ucs-2
。
DataFlavor
public static final DataFlavor selectBestTextFlavor(DataFlavor[] availableFlavors)
DataFlavor
数组中选择最佳文本
DataFlavor
。只能选择
DataFlavor.stringFlavor
、等效 flavor 和具有基本 MIME "text" 类型的 flavor。
首先 Flavor 按照其 MIME 类型排序,顺序如下所示:
例如,在 "text/html" 上选择 "text/sgml",在 DataFlavor.plainTextFlavor
上选择 DataFlavor.stringFlavor
。
如果两个或更多 flavor 共享数组中的最佳 MIME 类型,则需要检查 MIME 类型以查看它是否支持 charset 参数。
以下 MIME 类型支持(或被视为支持)charset 参数:
DataFlavor
中。如果是这样,则 JRE 将假定从该点开始,MIME 类型支持 charset 参数,并且不再进行检查。如果没有显式列入该参数,则 JRE 将假定从该点开始,MIME 类型不支持 charset 参数,并且不再进行检查。因为此检查是在任意选择的
DataFlavor
上执行的,所以如果 MIME 类型支持 charset 参数,开发人员就必须确保所有具有该 "text/<other>" MIME 类型的
DataFlavor
指定了该参数。开发人员不应该依赖 JRE 用平台的默认 charset 来替代 "text/<other>" DataFlavor。不遵守此限制将导致不确定的行为。
如果数组中的最佳 MIME 类型不支持 charset 参数,则共享 MIME 类型的 flavor 按照其表示形式类排序,顺序如下所示:java.io.InputStream
、java.nio.ByteBuffer
、[B
、<其他>。
如果两个或多个 flavor 共享最佳表示形式类,或者任何 flavor 都不具有三个指定的表示形式中的一个,则随意地选择这些 flavor 中的一个。
如果数组中的最佳 MIME 类型支持 charset 参数,则共享 MIME 类型的 flavor 按照其表示形式类排序,顺序如下所示:java.io.Reader
、java.lang.String
、java.nio.CharBuffer
、[C
、<其他>。
如果两个或多个 flavor 共享最佳表示形式类,并且该表示形式是明确列出的四个表示形式中的一个,则非随意地选择这些 flavor 中的一个。但是,如果任何 flavor 都不是四个指定的表示形式中的一个,则通过其 charset 对 flavor 排序。Unicode charset,如 "UTF-16"、"UTF-8"、"UTF-16BE"、"UTF-16LE" 及其别名被认为是最佳的。其次选择平台默认的 charset 及其别名。"US-ASCII" 及其别名最差。所有其他 charset 都是按字母顺序选择的,但是只考虑 Java 平台的此实现所支持的 charset。
如果两个或更多 flavor 共享最佳 charset,则 flavor 再次按照其表示形式类排序,顺序如下所示:java.io.InputStream
、java.nio.ByteBuffer
、[B
、<其他>。
如果两个或多个 flavor 共享最佳表示形式类,或者任何 flavor 都不具有三个指定的表示形式中的一个,则非随意地选择这些 flavor 中的一个。
availableFlavors
- 可用
DataFlavor
的数组
availableFlavors
为
null
、长度为零或包含非文本 flavor,则返回
null
public Reader getReaderForText(Transferable transferable) throws UnsupportedFlavorException, IOException
java.io.Reader
、
java.lang.String
、
java.nio.CharBuffer
、
[C
、
java.io.InputStream
、
java.nio.ByteBuffer
和
[B
。
因为不支持 charset 参数的文本 flavor 是以非标准格式编码的,所以应为这种 flavor 调用此方法。但是,为了维护向后兼容性,如果为这样的 flavor 调用了此方法,那么此方法会将该 flavor 视为支持 charset 参数,并相应地尝试为其解码。有关不支持 charset 参数的文本 flavor 列表,请参阅 selectBestTextFlavor
。
transferable
- 将在此 flavor 中请求其数据的
Transferable
Transferable
数据的
Reader
IllegalArgumentException
- 如果表示形式类不是上文列出的七种之一
IllegalArgumentException
- 如果
Transferable
包含
null
数据
NullPointerException
- 如果
Transferable
为
null
UnsupportedEncodingException
- 如果此 flavor 的表示形式为
java.io.InputStream
、
java.nio.ByteBuffer
或
[B
,但 Java 平台的此实现不支持此 flavor 的编码
UnsupportedFlavorException
- 如果
Transferable
不支持此 flavor
IOException
- 如果因 I/O 错误而无法读取数据
selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])
public String getMimeType()
DataFlavor
的 MIME 类型字符串。
public Class<?> getRepresentationClass()
DataFlavor
时,支持此
DataFlavor
的对象将返回的
Class
。
DataFlavor
时,支持此
DataFlavor
的对象将返回的
Class
。
public String getHumanPresentableName()
DataFlavor
表示的数据格式的得体的名称。此名称将由各个国家/地区来本地化。
DataFlavor
表示的数据格式的得体的名称
public String getPrimaryType()
DataFlavor
的基本 MIME 类型。
DataFlavor
的基本 MIME 类型
public String getSubType()
DataFlavor
的子 MIME 类型。
DataFlavor
的子 MIME 类型
public String getParameter(