DataFlavorpublic class DataFlavor extends Object implements Externalizable, CloneableA {@code DataFlavor} provides meta information about data. {@code DataFlavor}
is typically used to access data on the clipboard, or during
a drag and drop operation.
An instance of {@code DataFlavor} encapsulates a content type as
defined in RFC 2045
and RFC 2046.
A content type is typically referred to as a MIME type.
A content type consists of a media type (referred
to as the primary type), a subtype, and optional parameters. See
RFC 2045
for details on the syntax of a MIME type.
The JRE data transfer implementation interprets the parameter "class"
of a MIME type as a representation class.
The representation class reflects the class of the object being
transferred. In other words, the representation class is the type of
object returned by {@link Transferable#getTransferData}.
For example, the MIME type of {@link #imageFlavor} is
{@code "image/x-java-image;class=java.awt.Image"},
the primary type is {@code image}, the subtype is
{@code x-java-image}, and the representation class is
{@code java.awt.Image}. When {@code getTransferData} is invoked
with a {@code DataFlavor} of {@code imageFlavor}, an instance of
{@code java.awt.Image} is returned.
It's important to note that {@code DataFlavor} does no error checking
against the representation class. It is up to consumers of
{@code DataFlavor}, such as {@code Transferable}, to honor the representation
class.
Note, if you do not specify a representation class when
creating a {@code DataFlavor}, the default
representation class is used. See appropriate documentation for
{@code DataFlavor}'s constructors.
Also, {@code DataFlavor} instances with the "text" primary
MIME type may have a "charset" parameter. Refer to
RFC 2046 and
{@link #selectBestTextFlavor} for details on "text" MIME types
and the "charset" parameter.
Equality of {@code DataFlavors} is determined by the primary type,
subtype, and representation class. Refer to {@link #equals(DataFlavor)} for
details. When determining equality, any optional parameters are ignored.
For example, the following produces two {@code DataFlavors} that
are considered identical:
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);
As mentioned, {@code flavor1} and {@code flavor2} are considered identical.
As such, asking a {@code Transferable} for either {@code DataFlavor} returns
the same results.
For more information on the using data transfer with Swing see
the
How to Use Drag and Drop and Data Transfer,
section in Java Tutorial. |
Fields Summary |
---|
private static final long | serialVersionUID | private static final Class | ioInputStreamClass | public static final DataFlavor | stringFlavorThe DataFlavor representing a Java Unicode String class,
where:
representationClass = java.lang.String
mimeType = "application/x-java-serialized-object"
| public static final DataFlavor | imageFlavorThe DataFlavor representing a Java Image class,
where:
representationClass = java.awt.Image
mimeType = "image/x-java-image"
| public static final DataFlavor | plainTextFlavorThe DataFlavor representing plain text with Unicode
encoding, where:
representationClass = InputStream
mimeType = "text/plain; charset=unicode"
This DataFlavor has been deprecated because
(1) Its representation is an InputStream, an 8-bit based representation,
while Unicode is a 16-bit character set; and (2) The charset "unicode"
is not well-defined. "unicode" implies a particular platform's
implementation of Unicode, not a cross-platform implementation. | public static final String | javaSerializedObjectMimeTypeA MIME Content-Type of application/x-java-serialized-object represents
a graph of Java object(s) that have been made persistent.
The representation class associated with this DataFlavor
identifies the Java type of an object returned as a reference
from an invocation java.awt.datatransfer.getTransferData . | public static final DataFlavor | javaFileListFlavorTo transfer a list of files to/from Java (and the underlying
platform) a DataFlavor of this type/subtype and
representation class of java.util.List is used.
Each element of the list is required/guaranteed to be of type
java.io.File . | public static final String | javaJVMLocalObjectMimeTypeTo transfer a reference to an arbitrary Java object reference that
has no associated MIME Content-type, across a Transferable
interface WITHIN THE SAME JVM, a DataFlavor
with this type/subtype is used, with a representationClass
equal to the type of the class/interface being passed across the
Transferable .
The object reference returned from
Transferable.getTransferData for a DataFlavor
with this MIME Content-Type is required to be
an instance of the representation Class of the DataFlavor . | public static final String | javaRemoteObjectMimeTypeIn order to pass a live link to a Remote object via a Drag and Drop
ACTION_LINK operation a Mime Content Type of
application/x-java-remote-object should be used,
where the representation class of the DataFlavor
represents the type of the Remote interface to be
transferred. | private static Comparator | textFlavorComparator | transient int | atom | MimeType | mimeType | private String | humanPresentableName | private Class | representationClassJava class of objects this DataFlavor represents |
Constructors Summary |
---|
public DataFlavor()Constructs a new DataFlavor . This constructor is
provided only for the purpose of supporting the
Externalizable interface. It is not
intended for public (client) use.
super();
| private DataFlavor(String primaryType, String subType, MimeTypeParameterList params, Class representationClass, String humanPresentableName)Constructs a fully specified DataFlavor .
super();
if (primaryType == null) {
throw new NullPointerException("primaryType");
}
if (subType == null) {
throw new NullPointerException("subType");
}
if (representationClass == null) {
throw new NullPointerException("representationClass");
}
if (params == null) params = new MimeTypeParameterList();
params.set("class", representationClass.getName());
if (humanPresentableName == null) {
humanPresentableName = (String)params.get("humanPresentableName");
if (humanPresentableName == null)
humanPresentableName = primaryType + "/" + subType;
}
try {
mimeType = new MimeType(primaryType, subType, params);
} catch (MimeTypeParseException mtpe) {
throw new IllegalArgumentException("MimeType Parse Exception: " + mtpe.getMessage());
}
this.representationClass = representationClass;
this.humanPresentableName = humanPresentableName;
mimeType.removeParameter("humanPresentableName");
| public DataFlavor(Class representationClass, String humanPresentableName)Constructs a DataFlavor that represents a Java class.
The returned DataFlavor will have the following
characteristics:
representationClass = representationClass
mimeType = application/x-java-serialized-object
this("application", "x-java-serialized-object", null, representationClass, humanPresentableName);
if (representationClass == null) {
throw new NullPointerException("representationClass");
}
| public DataFlavor(String mimeType, String humanPresentableName)Constructs a DataFlavor that represents a
MimeType .
The returned DataFlavor will have the following
characteristics:
If the mimeType is
"application/x-java-serialized-object; class=<representation class>",
the result is the same as calling
new DataFlavor(Class:forName(<representation class>) .
Otherwise:
representationClass = InputStream
mimeType = mimeType
super();
if (mimeType == null) {
throw new NullPointerException("mimeType");
}
try {
initialize(mimeType, humanPresentableName, this.getClass().getClassLoader());
} catch (MimeTypeParseException mtpe) {
throw new IllegalArgumentException("failed to parse:" + mimeType);
} catch (ClassNotFoundException cnfe) {
throw new IllegalArgumentException("can't find specified class: " + cnfe.getMessage());
}
| public DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader)Constructs a DataFlavor that represents a
MimeType .
The returned DataFlavor will have the following
characteristics:
If the mimeType is
"application/x-java-serialized-object; class=<representation class>",
the result is the same as calling
new DataFlavor(Class:forName(<representation class>) .
Otherwise:
representationClass = InputStream
mimeType = mimeType
super();
if (mimeType == null) {
throw new NullPointerException("mimeType");
}
try {
initialize(mimeType, humanPresentableName, classLoader);
} catch (MimeTypeParseException mtpe) {
throw new IllegalArgumentException("failed to parse:" + mimeType);
}
| public DataFlavor(String mimeType)Constructs a DataFlavor from a mimeType string.
The string can specify a "class="
parameter to create a DataFlavor with the desired
representation class. If the string does not contain "class=" parameter,
java.io.InputStream is used as default.
super();
if (mimeType == null) {
throw new NullPointerException("mimeType");
}
try {
initialize(mimeType, null, this.getClass().getClassLoader());
} catch (MimeTypeParseException mtpe) {
throw new IllegalArgumentException("failed to parse:" + mimeType);
}
|
Methods Summary |
---|
public java.lang.Object | clone()Returns a clone of this DataFlavor .
Object newObj = super.clone();
if (mimeType != null) {
((DataFlavor)newObj).mimeType = (MimeType)mimeType.clone();
}
return newObj;
| private static java.awt.datatransfer.DataFlavor | createConstant(java.lang.Class rc, java.lang.String prn)
try {
return new DataFlavor(rc, prn);
} catch (Exception e) {
return null;
}
| private static java.awt.datatransfer.DataFlavor | createConstant(java.lang.String mt, java.lang.String prn)
try {
return new DataFlavor(mt, prn);
} catch (Exception e) {
return null;
}
| public boolean | equals(java.lang.Object o)Tests an arbitrary Object to this DataFlavor
for equality. Two DataFlavor s are considered equal if and
only if their MIME primary type and subtype and representation class are
equal. Additionally, if the primary type is "text", the subtype denotes
a text flavor which supports the charset parameter, and the
representation class is not java.io.Reader ,
java.lang.String , java.nio.CharBuffer , or
[C , the charset parameter must also be equal.
If a charset is not explicitly specified for one or both
DataFlavor s, the platform default encoding is assumed. See
selectBestTextFlavor for a list of text flavors which
support the charset parameter.
return ((o instanceof DataFlavor) && equals((DataFlavor)o));
| public boolean | equals(java.awt.datatransfer.DataFlavor that)Tests a DataFlavor to this DataFlavor for
equality. Two DataFlavor s are considered equal if and only
if their MIME primary type and subtype and representation class are
equal. Additionally, if the primary type is "text", the subtype denotes
a text flavor which supports the charset parameter, and the
representation class is not java.io.Reader ,
java.lang.String , java.nio.CharBuffer , or
[C , the charset parameter must also be equal.
If a charset is not explicitly specified for one or both
DataFlavor s, the platform default encoding is assumed. See
selectBestTextFlavor for a list of text flavors which
support the charset parameter.
if (that == null) {
return false;
}
if (this == that) {
return true;
}
if (representationClass == null) {
if (that.getRepresentationClass() != null) {
return false;
}
} else {
if (!representationClass.equals(that.getRepresentationClass())) {
return false;
}
}
if (mimeType == null) {
if (that.mimeType != null) {
return false;
}
} else {
if (!mimeType.match(that.mimeType)) {
return false;
}
if ("text".equals(getPrimaryType()) &&
DataTransferer.doesSubtypeSupportCharset(this) &&
representationClass != null &&
!(isRepresentationClassReader() ||
String.class.equals(representationClass) ||
isRepresentationClassCharBuffer() ||
DataTransferer.charArrayClass.equals(representationClass)))
{
String thisCharset =
DataTransferer.canonicalName(getParameter("charset"));
String thatCharset =
DataTransferer.canonicalName(that.getParameter("charset"));
if (thisCharset == null) {
if (thatCharset != null) {
return false;
}
} else {
if (!thisCharset.equals(thatCharset)) {
return false;
}
}
}
}
return true;
| public boolean | equals(java.lang.String s)Compares only the mimeType against the passed in
String and representationClass is
not considered in the comparison.
If representationClass needs to be compared, then
equals(new DataFlavor(s)) may be used.
if (s == null || mimeType == null)
return false;
return isMimeTypeEqual(s);
| public final java.lang.Class | getDefaultRepresentationClass()
return ioInputStreamClass;
| public final java.lang.String | getDefaultRepresentationClassAsString()
return getDefaultRepresentationClass().getName();
| public java.lang.String | getHumanPresentableName()Returns the human presentable name for the data format that this
DataFlavor represents. This name would be localized
for different countries.
return humanPresentableName;
| public java.lang.String | getMimeType()Returns the MIME type string for this DataFlavor .
return (mimeType != null) ? mimeType.toString() : null;
| public java.lang.String | getParameter(java.lang.String paramName)Returns the human presentable name for this DataFlavor
if paramName equals "humanPresentableName". Otherwise
returns the MIME type value associated with paramName .
if (paramName.equals("humanPresentableName")) {
return humanPresentableName;
} else {
return (mimeType != null)
? mimeType.getParameter(paramName) : null;
}
| public java.lang.String | getPrimaryType()Returns the primary MIME type for this DataFlavor .
return (mimeType != null) ? mimeType.getPrimaryType() : null;
| public java.io.Reader | getReaderForText(java.awt.datatransfer.Transferable transferable)Gets a Reader for a text flavor, decoded, if necessary, for the expected
charset (encoding). The supported representation classes are
java.io.Reader , java.lang.String ,
java.nio.CharBuffer , [C ,
java.io.InputStream , java.nio.ByteBuffer ,
and [B .
Because text flavors which do not support the charset parameter are
encoded in a non-standard format, this method should not be called for
such flavors. However, in order to maintain backward-compatibility,
if this method is called for such a flavor, this method will treat the
flavor as though it supports the charset parameter and attempt to
decode it accordingly. See selectBestTextFlavor for a list
of text flavors which do not support the charset parameter.
Object transferObject = transferable.getTransferData(this);
if (transferObject == null) {
throw new IllegalArgumentException
("getTransferData() returned null");
}
if (transferObject instanceof Reader) {
return (Reader)transferObject;
} else if (transferObject instanceof String) {
return new StringReader((String)transferObject);
} else if (transferObject instanceof CharBuffer) {
CharBuffer buffer = (CharBuffer)transferObject;
int size = buffer.remaining();
char[] chars = new char[size];
buffer.get(chars, 0, size);
return new CharArrayReader(chars);
} else if (transferObject instanceof char[]) {
return new CharArrayReader((char[])transferObject);
}
InputStream stream = null;
if (transferObject instanceof InputStream) {
stream = (InputStream)transferObject;
} else if (transferObject instanceof ByteBuffer) {
ByteBuffer buffer = (ByteBuffer)transferObject;
int size = buffer.remaining();
byte[] bytes = new byte[size];
buffer.get(bytes, 0, size);
stream = new ByteArrayInputStream(bytes);
} else if (transferObject instanceof byte[]) {
stream = new ByteArrayInputStream((byte[])transferObject);
}
if (stream == null) {
throw new IllegalArgumentException("transfer data is not Reader, String, CharBuffer, char array, InputStream, ByteBuffer, or byte array");
}
String encoding = getParameter("charset");
return (encoding == null)
? new InputStreamReader(stream)
: new InputStreamReader(stream, encoding);
| public java.lang.Class | getRepresentationClass()Returns the Class which objects supporting this
DataFlavor will return when this DataFlavor
is requested.
return representationClass;
| public java.lang.String | getSubType()Returns the sub MIME type of this DataFlavor .
return (mimeType != null) ? mimeType.getSubType() : null;
| public static final java.awt.datatransfer.DataFlavor | getTextPlainUnicodeFlavor()Returns a DataFlavor representing plain text with Unicode
encoding, where:
representationClass = java.io.InputStream
mimeType = "text/plain;
charset=<platform default Unicode encoding>"
Sun's implementation for Microsoft Windows uses the encoding utf-16le .
Sun's implementation for Solaris and Linux uses the encoding
iso-10646-ucs-2 .
String encoding = null;
DataTransferer transferer = DataTransferer.getInstance();
if (transferer != null) {
encoding = transferer.getDefaultUnicodeEncoding();
}
return new DataFlavor(
"text/plain;charset="+encoding
+";class=java.io.InputStream", "Plain Text");
| public int | hashCode()Returns hash code for this DataFlavor .
For two equal DataFlavor s, hash codes are equal.
For the String
that matches DataFlavor.equals(String) , it is not
guaranteed that DataFlavor 's hash code is equal
to the hash code of the String .
int total = 0;
if (representationClass != null) {
total += representationClass.hashCode();
}
if (mimeType != null) {
String primaryType = mimeType.getPrimaryType();
if (primaryType != null) {
total += primaryType.hashCode();
}
// Do not add subType.hashCode() to the total. equals uses
// MimeType.match which reports a match if one or both of the
// subTypes is '*', regardless of the other subType.
if ("text".equals(primaryType) &&
DataTransferer.doesSubtypeSupportCharset(this) &&
representationClass != null &&
!(isRepresentationClassReader() ||
String.class.equals(representationClass) ||
isRepresentationClassCharBuffer() ||
DataTransferer.charArrayClass.equals
(representationClass)))
{
String charset =
DataTransferer.canonicalName(getParameter("charset"));
if (charset != null) {
total += charset.hashCode();
}
}
}
return total;
| private void | initialize(java.lang.String mimeType, java.lang.String humanPresentableName, java.lang.ClassLoader classLoader)Common initialization code called from various constructors.
if (mimeType == null) {
throw new NullPointerException("mimeType");
}
this.mimeType = new MimeType(mimeType); // throws
String rcn = getParameter("class");
if (rcn == null) {
if ("application/x-java-serialized-object".equals(this.mimeType.getBaseType()))
throw new IllegalArgumentException("no representation class specified for:" + mimeType);
else
representationClass = java.io.InputStream.class; // default
} else { // got a class name
representationClass = DataFlavor.tryToLoadClass(rcn, classLoader);
}
this.mimeType.setParameter("class", representationClass.getName());
if (humanPresentableName == null) {
humanPresentableName = this.mimeType.getParameter("humanPresentableName");
if (humanPresentableName == null)
humanPresentableName = this.mimeType.getPrimaryType() + "/" + this.mimeType.getSubType();
}
this.humanPresentableName = humanPresentableName; // set it.
this.mimeType.removeParameter("humanPresentableName"); // just in case
| public boolean | isFlavorJavaFileListType()Returns true if the DataFlavor specified represents
a list of file objects.
if (mimeType == null || representationClass == null)
return false;
return java.util.List.class.isAssignableFrom(representationClass) &&
mimeType.match(javaFileListFlavor.mimeType);
| public boolean | isFlavorRemoteObjectType()Returns true if the DataFlavor specified represents
a remote object.
return isRepresentationClassRemote()
&& isRepresentationClassSerializable()
&& isMimeTypeEqual(javaRemoteObjectMimeType);
| public boolean | isFlavorSerializedObjectType()Returns true if the DataFlavor specified represents
a serialized object.
return isRepresentationClassSerializable() && isMimeTypeEqual(javaSerializedObjectMimeType);
| public boolean | isFlavorTextType()Returns whether this DataFlavor is a valid text flavor for
this implementation of the Java platform. Only flavors equivalent to
DataFlavor.stringFlavor and DataFlavor s with
a primary MIME type of "text" can be valid text flavors.
If this flavor supports the charset parameter, it must be equivalent to
DataFlavor.stringFlavor , or its representation must be
java.io.Reader , java.lang.String ,
java.nio.CharBuffer , [C ,
java.io.InputStream , java.nio.ByteBuffer , or
[B . If the representation is
java.io.InputStream , java.nio.ByteBuffer , or
[B , then this flavor's charset parameter must
be supported by this implementation of the Java platform. If a charset
is not specified, then the platform default charset, which is always
supported, is assumed.
If this flavor does not support the charset parameter, its
representation must be java.io.InputStream ,
java.nio.ByteBuffer , or [B .
See selectBestTextFlavor for a list of text flavors which
support the charset parameter.
return (DataTransferer.isFlavorCharsetTextType(this) ||
DataTransferer.isFlavorNoncharsetTextType(this));
| public boolean | isMimeTypeEqual(java.lang.String mimeType)Returns whether the string representation of the MIME type passed in
is equivalent to the MIME type of this DataFlavor .
Parameters are not included in the comparison.
// JCK Test DataFlavor0117: if 'mimeType' is null, throw NPE
if (mimeType == null) {
throw new NullPointerException("mimeType");
}
if (this.mimeType == null) {
return false;
}
try {
return this.mimeType.match(new MimeType(mimeType));
} catch (MimeTypeParseException mtpe) {
return false;
}
| public final boolean | isMimeTypeEqual(java.awt.datatransfer.DataFlavor dataFlavor)Compares the mimeType of two DataFlavor
objects. No parameters are considered.
return isMimeTypeEqual(dataFlavor.mimeType);
| private boolean | isMimeTypeEqual(java.awt.datatransfer.MimeType mtype)Compares the mimeType of two DataFlavor
objects. No parameters are considered.
if (this.mimeType == null) {
return (mtype == null);
}
return mimeType.match(mtype);
| public boolean | isMimeTypeSerializedObject()Does the DataFlavor represent a serialized object?
return isMimeTypeEqual(javaSerializedObjectMimeType);
| public boolean | isRepresentationClassByteBuffer()Returns whether the representation class for this
DataFlavor is java.nio.ByteBuffer or a
subclass thereof.
return java.nio.ByteBuffer.class.isAssignableFrom(representationClass);
| public boolean | isRepresentationClassCharBuffer()Returns whether the representation class for this
DataFlavor is java.nio.CharBuffer or a
subclass thereof.
return java.nio.CharBuffer.class.isAssignableFrom(representationClass);
| public boolean | isRepresentationClassInputStream()Does the DataFlavor represent a
java.io.InputStream ?
return ioInputStreamClass.isAssignableFrom(representationClass);
| public boolean | isRepresentationClassReader()Returns whether the representation class for this
DataFlavor is java.io.Reader or a subclass
thereof.
return java.io.Reader.class.isAssignableFrom(representationClass);
| public boolean | isRepresentationClassRemote()Returns true if the representation class is Remote .
return java.rmi.Remote.class.isAssignableFrom(representationClass);
| public boolean | isRepresentationClassSerializable()Returns true if the representation class can be serialized.
return java.io.Serializable.class.isAssignableFrom(representationClass);
| public boolean | match(java.awt.datatransfer.DataFlavor that)Tests a DataFlavor to this DataFlavor for
equality. Two DataFlavor s are considered equal if and only
if their MIME primary type and subtype and representation class are
equal. Additionally, if the primary type is "text", the subtype denotes
a text flavor which supports the charset parameter, and the
representation class is not java.io.Reader ,
java.lang.String , java.nio.CharBuffer , or
[C , the charset parameter must also be equal.
If a charset is not explicitly specified for one or both
DataFlavor s, the platform default encoding is assumed. See
selectBestTextFlavor for a list of text flavors which
support the charset parameter.
return equals(that);
| protected java.lang.String | normalizeMimeType(java.lang.String mimeType)Called for each MIME type string to give DataFlavor subtypes
the opportunity to change how the normalization of MIME types is
accomplished. One possible use would be to add default
parameter/value pairs in cases where none are present in the MIME
type string passed in.
This method is never invoked by this implementation from 1.1 onwards.
return mimeType;
| protected java.lang.String | normalizeMimeTypeParameter(java.lang.String parameterName, java.lang.String parameterValue)Called on DataFlavor for every MIME Type parameter
to allow DataFlavor subclasses to handle special
parameters like the text/plain charset
parameters, whose values are case insensitive. (MIME type parameter
values are supposed to be case sensitive.
This method is called for each parameter name/value pair and should
return the normalized representation of the parameterValue .
This method is never invoked by this implementation from 1.1 onwards.
return parameterValue;
| private java.lang.String | paramString()
String params = "";
params += "mimetype=";
if (mimeType == null) {
params += "null";
} else {
params += mimeType.getBaseType();
}
params += ";representationclass=";
if (representationClass == null) {
params += "null";
} else {
params += representationClass.getName();
}
if (DataTransferer.isFlavorCharsetTextType(this) &&
(isRepresentationClassInputStream() ||
isRepresentationClassByteBuffer() ||
DataTransferer.byteArrayClass.equals(representationClass)))
{
params += ";charset=" + DataTransferer.getTextCharset(this);
}
return params;
| public synchronized void | readExternal(java.io.ObjectInput is)Restores this DataFlavor from a Serialized state.
String rcn = null;
mimeType = (MimeType)is.readObject();
if (mimeType != null) {
humanPresentableName =
mimeType.getParameter("humanPresentableName");
mimeType.removeParameter("humanPresentableName");
rcn = mimeType.getParameter("class");
if (rcn == null) {
throw new IOException("no class parameter specified in: " +
mimeType);
}
}
try {
representationClass = (Class)is.readObject();
} catch (OptionalDataException ode) {
if (!ode.eof || ode.length != 0) {
throw ode;
}
// Ensure backward compatibility.
// Old versions didn't write the representation class to the stream.
if (rcn != null) {
representationClass =
DataFlavor.tryToLoadClass(rcn, getClass().getClassLoader());
}
}
| public static final java.awt.datatransfer.DataFlavor | selectBestTextFlavor(java.awt.datatransfer.DataFlavor[] availableFlavors)Selects the best text DataFlavor from an array of
DataFlavor s. Only DataFlavor.stringFlavor , and
equivalent flavors, and flavors that have a primary MIME type of "text",
are considered for selection.
Flavors are first sorted by their MIME types in the following order:
- "text/sgml"
- "text/xml"
- "text/html"
- "text/rtf"
- "text/enriched"
- "text/richtext"
- "text/uri-list"
- "text/tab-separated-values"
- "text/t140"
- "text/rfc822-headers"
- "text/parityfec"
- "text/directory"
- "text/css"
- "text/calendar"
- "application/x-java-serialized-object"
- "text/plain"
- "text/<other>"
For example, "text/sgml" will be selected over
"text/html", and DataFlavor.stringFlavor will be chosen
over DataFlavor.plainTextFlavor .
If two or more flavors share the best MIME type in the array, then that
MIME type will be checked to see if it supports the charset parameter.
The following MIME types support, or are treated as though they support,
the charset parameter:
- "text/sgml"
- "text/xml"
- "text/html"
- "text/enriched"
- "text/richtext"
- "text/uri-list"
- "text/directory"
- "text/css"
- "text/calendar"
- "application/x-java-serialized-object"
- "text/plain"
The following MIME types do not support, or are treated as though they
do not support, the charset parameter:
- "text/rtf"
- "text/tab-separated-values"
- "text/t140"
- "text/rfc822-headers"
- "text/parityfec"
For "text/<other>" MIME types, the first time the JRE needs to
determine whether the MIME type supports the charset parameter, it will
check whether the parameter is explicitly listed in an arbitrarily
chosen DataFlavor which uses that MIME type. If so, the JRE
will assume from that point on that the MIME type supports the charset
parameter and will not check again. If the parameter is not explicitly
listed, the JRE will assume from that point on that the MIME type does
not support the charset parameter and will not check again. Because
this check is performed on an arbitrarily chosen
DataFlavor , developers must ensure that all
DataFlavor s with a "text/<other>" MIME type specify
the charset parameter if it is supported by that MIME type. Developers
should never rely on the JRE to substitute the platform's default
charset for a "text/<other>" DataFlavor. Failure to adhere to this
restriction will lead to undefined behavior.
If the best MIME type in the array does not support the charset
parameter, the flavors which share that MIME type will then be sorted by
their representation classes in the following order:
java.io.InputStream , java.nio.ByteBuffer ,
[B , <all others>.
If two or more flavors share the best representation class, or if no
flavor has one of the three specified representations, then one of those
flavors will be chosen non-deterministically.
If the best MIME type in the array does support the charset parameter,
the flavors which share that MIME type will then be sorted by their
representation classes in the following order:
java.io.Reader , java.lang.String ,
java.nio.CharBuffer , [C , <all others>.
If two or more flavors share the best representation class, and that
representation is one of the four explicitly listed, then one of those
flavors will be chosen non-deterministically. If, however, no flavor has
one of the four specified representations, the flavors will then be
sorted by their charsets. Unicode charsets, such as "UTF-16", "UTF-8",
"UTF-16BE", "UTF-16LE", and their aliases, are considered best. After
them, the platform default charset and its aliases are selected.
"US-ASCII" and its aliases are worst. All other charsets are chosen in
alphabetical order, but only charsets supported by this implementation
of the Java platform will be considered.
If two or more flavors share the best charset, the flavors will then
again be sorted by their representation classes in the following order:
java.io.InputStream , java.nio.ByteBuffer ,
[B , <all others>.
If two or more flavors share the best representation class, or if no
flavor has one of the three specified representations, then one of those
flavors will be chosen non-deterministically.
if (availableFlavors == null || availableFlavors.length == 0) {
return null;
}
if (textFlavorComparator == null) {
textFlavorComparator = new TextFlavorComparator();
}
DataFlavor bestFlavor =
(DataFlavor)Collections.max(Arrays.asList(availableFlavors),
textFlavorComparator);
if (!bestFlavor.isFlavorTextType()) {
return null;
}
return bestFlavor;
| public void | setHumanPresentableName(java.lang.String humanPresentableName)Sets the human presentable name for the data format that this
DataFlavor represents. This name would be localized
for different countries.
this.humanPresentableName = humanPresentableName;
| public java.lang.String | toString()String representation of this DataFlavor and its
parameters. The resulting String contains the name of
the DataFlavor class, this flavor's MIME type, and its
representation class. If this flavor has a primary MIME type of "text",
supports the charset parameter, and has an encoded representation, the
flavor's charset is also included. See selectBestTextFlavor
for a list of text flavors which support the charset parameter.
String string = getClass().getName();
string += "["+paramString()+"]";
return string;
| protected static final java.lang.Class | tryToLoadClass(java.lang.String className, java.lang.ClassLoader fallback)Tries to load a class from: the bootstrap loader, the system loader,
the context loader (if one is present) and finally the loader specified.
ClassLoader systemClassLoader = (ClassLoader)
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() {
public Object run() {
ClassLoader cl = Thread.currentThread().
getContextClassLoader();
return (cl != null)
? cl
: ClassLoader.getSystemClassLoader();
}
});
try {
return Class.forName(className, true, systemClassLoader);
} catch (ClassNotFoundException e2) {
if (fallback != null) {
return Class.forName(className, true, fallback);
} else {
throw new ClassNotFoundException(className);
}
}
| public synchronized void | writeExternal(java.io.ObjectOutput os)Serializes this DataFlavor .
if (mimeType != null) {
mimeType.setParameter("humanPresentableName", humanPresentableName);
os.writeObject(mimeType);
mimeType.removeParameter("humanPresentableName");
} else {
os.writeObject(null);
}
os.writeObject(representationClass);
|
|