当前位置:  技术问答>java相关

如何进行MIME编码解码,Java的标准库有吗?

    来源: 互联网  发布时间:2014-12-25

    本文导语:  如何进行MIME编码解码,Java的标准库有吗? | /**  * @version 1.10 1999-09-20  * @author Cay Horstmann  */ import java.io.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.awt.datatransfer.*...

如何进行MIME编码解码,Java的标准库有吗?

|
/**
 * @version 1.10 1999-09-20
 * @author Cay Horstmann
 */

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;

public class MimeClipboardTest
{  public static void main(String [] args)
   {  JFrame frame = new MimeClipboardFrame();
      frame.show();
   }
}

class MimeClipboardFrame extends JFrame
   implements ActionListener
{  public MimeClipboardFrame()
   {  setSize(300, 300);
      setTitle("MimeClipboardTest");
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      Container contentPane = getContentPane();
      label = new JLabel();
      contentPane.add(label, "Center");

      JMenu fileMenu = new JMenu("File");
      openItem = new JMenuItem("Open");
      openItem.addActionListener(this);
      fileMenu.add(openItem);

      exitItem = new JMenuItem("Exit");
      exitItem.addActionListener(this);
      fileMenu.add(exitItem);

      JMenu editMenu = new JMenu("Edit");
      copyItem = new JMenuItem("Copy");
      copyItem.addActionListener(this);
      editMenu.add(copyItem);

      pasteItem = new JMenuItem("Paste");
      pasteItem.addActionListener(this);
      editMenu.add(pasteItem);

      JMenuBar menuBar = new JMenuBar();
      menuBar.add(fileMenu);
      menuBar.add(editMenu);
      setJMenuBar(menuBar);
   }

   public void actionPerformed(ActionEvent evt)
   {  Object source = evt.getSource();
      if (source == openItem)
      {  JFileChooser chooser = new JFileChooser();
         chooser.setCurrentDirectory(new File("."));

         chooser.setFileFilter(new
            javax.swing.filechooser.FileFilter()
            {  public boolean accept(File f)
               {  String name = f.getName().toLowerCase();
                  return name.endsWith(".gif")
                     || name.endsWith(".jpg")
                     || name.endsWith(".jpeg")
                     || f.isDirectory();
               }
               public String getDescription()
               {  return "Image files";
               }
            });

         int r = chooser.showOpenDialog(this);
         if(r == JFileChooser.APPROVE_OPTION)
         {  String name
               = chooser.getSelectedFile().getAbsolutePath();
            setImage(Toolkit.getDefaultToolkit().getImage(name));
         }
      }
      else if (source == exitItem) System.exit(0);
      else if (source == copyItem) copy();
      else if (source == pasteItem) paste();
   }

   private void copy()
   {  MediaTracker tracker = new MediaTracker(this);
      tracker.addImage(theImage, 0);
      try { tracker.waitForID(0); }
      catch (InterruptedException e) {}
      BufferedImage image
         = new BufferedImage(theImage.getWidth(null),
            theImage.getHeight(null),
            BufferedImage.TYPE_INT_RGB);
      Graphics2D g2 = image.createGraphics();
      g2.drawImage(theImage, 0, 0, null);

      Bitmap bitmap = new Bitmap(image);
      SerializableSelection selection
         = new SerializableSelection(bitmap);
      mimeClipboard.setContents(selection, null);
   }

   private void paste()
   {  Transferable selection
         = mimeClipboard.getContents(this);
      try
      {  Bitmap bitmap = (Bitmap)selection.getTransferData
            (SerializableSelection.serializableFlavor);
         setImage(bitmap.getImage());
      }
      catch(Exception e) {}
   }

   public void setImage(Image image)
   {  theImage = image;
      label.setIcon(new ImageIcon(image));
   }

   private static Clipboard mimeClipboard
      = new MimeClipboard
         (Toolkit.getDefaultToolkit().getSystemClipboard());
   private Image theImage;
   private JLabel label;
   private JMenuItem openItem;
   private JMenuItem exitItem;
   private JMenuItem copyItem;
   private JMenuItem pasteItem;
}

class Bitmap implements Serializable
{  public Bitmap(BufferedImage image)
   {  type = image.getType();
      width = image.getWidth();
      height = image.getHeight();
      WritableRaster raster = image.getRaster();
      data = raster.getDataElements(0, 0, width, height, null);
   }

   public BufferedImage getImage()
   {  BufferedImage image
         = new BufferedImage(width, height, type);
      WritableRaster raster = image.getRaster();
      raster.setDataElements(0, 0, width, height, data);
      return image;
   }

   private int type;
   private int width;
   private int height;
   private Object data;
}

class SerializableSelection implements Transferable
{  public SerializableSelection(Serializable object)
   {  theObject = object;
   }

   public boolean isDataFlavorSupported(DataFlavor flavor)
   {  return flavor.equals(serializableFlavor);
   }

   public synchronized Object getTransferData
      (DataFlavor flavor)
      throws UnsupportedFlavorException
   {  if(flavor.equals(serializableFlavor))
      {  return theObject;
      }
      else
      {  throw new UnsupportedFlavorException(flavor);
      }
   }

   public DataFlavor[] getTransferDataFlavors()
   {  return flavors;
   }

   public static final DataFlavor serializableFlavor
      = new DataFlavor(java.io.Serializable.class,
      "Serializable Object");

   private static DataFlavor[] flavors
      = { serializableFlavor };

   private Serializable theObject;
}

class MimeClipboard extends Clipboard
{  public MimeClipboard(Clipboard cb)
   {  super("MIME/" + cb.getName());
      clip = cb;
   }

   public synchronized void setContents(Transferable contents,
      ClipboardOwner owner)
   {  if (contents instanceof SerializableSelection)
      {  try
         {  DataFlavor flavor
               = SerializableSelection.serializableFlavor;
            Serializable obj = (Serializable)
               contents.getTransferData(flavor);
            String enc = encode(obj);
            String header = "Content-type: "
               + flavor.getMimeType()
               + "nContent-length: "
               + enc.length() + "nn";
            StringSelection selection
               = new StringSelection(header + enc);
            clip.setContents(selection, owner);
         }
         catch(UnsupportedFlavorException e)
         {}
         catch(IOException e)
         {}
      }
      else clip.setContents(contents, owner);
   }

   public synchronized Transferable getContents
      (Object requestor)
   {  Transferable contents = clip.getContents(requestor);

      if (contents instanceof StringSelection)
      {  String data = null;
         try
         {  data = (String)contents.getTransferData
               (DataFlavor.stringFlavor);
         }
         catch(UnsupportedFlavorException e)
         { return contents; }
         catch(IOException e)
         { return contents; }

         if (!data.startsWith("Content-type: "))
            return contents;
         int start = -1;
         // skip three newlines
         for (int i = 0; i  2]);
         super.write(toBase64[((inbuf[0] & 0x03)  4)]);
         super.write(toBase64[((inbuf[1] & 0x0F)  6)]);
         super.write(toBase64[inbuf[2] & 0x3F]);
         col += 4;
         i = 0;
         if (col >= 76)
         {  super.write('n');
            col = 0;
         }
      }
   }

   public void flush() throws IOException
   {  if (i == 1)
      {  super.write(toBase64[(inbuf[0] & 0xFC) >> 2]);
         super.write(toBase64[(inbuf[0] & 0x03)  2]);
         super.write(toBase64[((inbuf[0] & 0x03)  4)]);
         super.write(toBase64[(inbuf[1] & 0x0F) 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • turbolinux7在安装到选择 哪种类型(标准桌面电脑型,开发型,完全....)不能再进行下一步了
  • C++ I/O 成员 seekg():在一个输入流中进行随机访问
  • 在 uclinux 上面 进行编程,程序如何对硬盘进行格式化和分区?
  • SQL Server 2008如何进行数据库分离和附加详细介绍
  • 谁用过ejb 进行模糊查询???语句怎么写???能实现根据中间的字符串进行模糊查找么?
  • linux下objdump命令用法介绍及如何使用objdump命令进行反汇编
  • 我安装Samba 3.0.4,能够使用smbclient进行登陆,可是不能使用windowsXP进行登陆
  • 如何进行MongoDB自动备份增量备份和恢复
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?
  • 在jbuilder4.0中如何进行部署(怎样把应用程序进行打包,发布)?一定给分
  • 下来了FREE BSD的镜像 请问,是直接刻录就可以光盘启动进行安装吗?还是有特殊的要求(我想用光盘启动进行安装)
  • oracle10g装在redhat linux es3 下进行pro*cc++进行编程的问题
  • 我用7.2进行服务器模式安装,随后对XWINDOW进行配置,重启之后虽然出现登陆图形界面,但进去之后,桌面上只出现一个X形鼠标,其他均无任何图标
  • 紧急求救,我电脑本来是装了win2000和linux flag,今天我对硬盘进行了fdisk操作,本以为把所有的东西都清掉了,可是当我c盘进行了format
  • 在一个进程中我定义了几个全局变量,然后我又fork了几个子进程,子进程中是否可以各自对全局变量进行修改,如果各子进程都对其进行修改,
  • 多线程调用ioctl 应在哪进行互斥操作?
  • 对终端辅口进行读操作,程序要嵌在curses环境里
  • 简单问题,如何对db2数据库进行模糊查询?
  • 在中断服务程序里可以进行文件的读写操作么?
  • linux下TCP连接进行容错怎么实现的
  • 请问如何通过C对modem进行自动ppp拨号
  • 在Red hat 是否支持类似windows的远程终端进行图形界面操作?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3