文档章节

二维码工具类 - QrcodeUtils.java

jin_6868
 jin_6868
发布于 2017/05/25 11:30
字数 2396
阅读 8
收藏 1
点赞 0
评论 0

二维码工具类,提供多种生成二维码、解析二维码的方法,包括中间logo的二维码等方法。

 - QrcodeUtils.javaMatrixToImageWriterEx.javaMatrixToLogoImageConfig.javacommons-io-2.4.jarcommons-lang-2.6.jarslf4j-api-1.7.12.jarjavase-3.1.0.jarcore-3.1.0.jar 、FolderUtils.java)

 

QrcodeUtils.java 源码:

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.imageio.ImageIO;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 二维码工具类
 * 
 */
public class QrcodeUtils {

    private static final transient Logger LOGGER = LoggerFactory.getLogger(QrcodeUtils.class);

    private static transient String DEFAULT_FORMAT = "jpg";
    private static transient int DEFAULT_WIDTH = 200;
    private static transient int DEFAULT_HEIGHT = 200;

    static {
        try {
            final String[] foo = new String[] { "240", "240" };
            final String format = "jpg";
            if (StringUtils.isNotBlank(format)) {
                DEFAULT_FORMAT = StringUtils.strip(format).toLowerCase();
            }

            if (ArrayUtils.isNotEmpty(foo) && foo.length == 2) {
                Integer tmpWidth = Integer.valueOf(foo[0]);
                Integer tmpHeight = Integer.valueOf(foo[1]);
                if (tmpWidth > 0 && tmpHeight > 0) {
                    DEFAULT_WIDTH = tmpWidth;
                    DEFAULT_HEIGHT = tmpHeight;
                } else {
                    LOGGER.warn("qrcode size must be lager than zero.");
                }
            }
        } catch (Throwable e) {
            LOGGER.warn("read default qrcode size config error: ", e);
        }
    }

    /**
     * 生成二维码(无中间logo)
     * 
     * @param content
     *            二维码文本内容
     * @param destFile
     *            输出文件
     */
    public static final void gen(final String content, File destFile) throws Exception {
        gen(content, destFile, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param destFile
     *            目的文件
     * @param logoFile
     *            中间logo文件
     * 
     */
    public static final void gen(final String content, final File destFile, final File logoFile) throws Exception {
        gen(content, destFile, logoFile, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param destFile
     *            目的文件
     * @param logoFile
     *            中间logo文件
     * @param width
     *            宽度
     * @param height
     *            高度
     */
    public static final void gen(final String content, final File destFile,
            final File logoFile, int width, int height) throws Exception {
        FolderUtils.mkdirs(destFile.getParent());
        OutputStream output = null;
        InputStream input = null;
        try {
            output = new BufferedOutputStream(new FileOutputStream(destFile));
            if (logoFile != null && logoFile.exists() && logoFile.isFile()) {
                input = new BufferedInputStream(new FileInputStream(logoFile));
            }
            gen(content, output, input, width, height);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new Exception(e);
        } finally {
            IOUtils.closeQuietly(output);
            IOUtils.closeQuietly(input);
        }
    }

    /**
     * 生成二维码(无中间logo)
     * 
     * @param content
     *            二维码文本内容
     * @param destFile
     *            输出文件
     * @param width
     *            宽度
     * @param height
     *            高度
     */
    public static final void gen(final String content, File destFile, int width, int height) throws Exception {
        FolderUtils.mkdirs(destFile.getParent());
        OutputStream output = null;
        try {
            output = new BufferedOutputStream(new FileOutputStream(destFile));
            gen(content, output, width, height);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new Exception(e);
        } catch (Exception e) {
            throw e;
        } finally {
            IOUtils.closeQuietly(output);
        }
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param output
     *            输出流
     */
    public static final void gen(final String content, final OutputStream output) throws Exception {
        gen(content, output, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param output
     *            输出流
     * @param logoInput
     *            中间logo输入流,为空时中间无logo
     */
    public static final void gen(final String content,
            final OutputStream output, final InputStream logoInput) throws Exception {
        gen(content, output, logoInput, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param output
     *            输出流
     * @param logoInput
     *            中间logo输入流,为空时中间无logo
     * @param width
     *            宽度
     * @param height
     *            高度
     */
    public static final void gen(final String content,
            final OutputStream output, final InputStream logoInput, int width, int height) throws Exception {
        gen(content, output, logoInput, width, height, ErrorCorrectionLevel.M);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param output
     *            输出流
     * @param logoInput
     *            中间logo输入流,为空时中间无logo
     * @param width
     *            宽度
     * @param height
     *            高度
     * @param errorCorrectionLevel
     *            容错级别
     */
    public static final void gen(final String content,
            final OutputStream output, final InputStream logoInput, int width,
            int height, ErrorCorrectionLevel errorCorrectionLevel) throws Exception {
        if (StringUtils.isEmpty(content)) {
            throw new IllegalArgumentException("qr code content cannot be empty.");
        }
        if (output == null) {
            throw new IllegalArgumentException("qr code output stream cannot be null.");
        }

        final BitMatrix matrix = MatrixToImageWriterEx.createQRCode(content, width, height, errorCorrectionLevel);

        if (logoInput == null) {
            try {
                MatrixToImageWriter.writeToStream(matrix, DEFAULT_FORMAT, output);
                return;
            } catch (IOException e) {
                e.printStackTrace();
                throw new Exception(e);
            }
        }

        final MatrixToLogoImageConfig logoConfig = new MatrixToLogoImageConfig(Color.BLUE, 4);

        final String destPath = FilenameUtils.normalizeNoEndSeparator(SystemUtils.getJavaIoTmpDir()
                        + File.separator + UUID.randomUUID().toString()
                        + ".tmp");
        InputStream tmpInput = null;
        final File destFile = new File(destPath);
        try {
            MatrixToImageWriterEx.writeToFile(matrix, DEFAULT_FORMAT, destPath, logoInput, logoConfig);
            tmpInput = new BufferedInputStream(new FileInputStream(destFile));
            IOUtils.copy(tmpInput, output);
        } catch (IOException e) {
            e.printStackTrace();
            throw new Exception(e);
        } finally {
            IOUtils.closeQuietly(tmpInput);
            destFile.delete();
        }
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param output
     *            输出流
     * @param width
     *            宽度
     * @param height
     *            高度
     */
    public static final void gen(final String content, final OutputStream output, int width, int height) throws Exception {
        gen(content, output, null, width, height);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param destPath
     *            输出文件路径
     */
    public static final void gen(final String content, final String destPath) throws Exception {
        gen(content, destPath, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param destPath
     *            输出文件路径
     * @param width
     *            宽度
     * @param height
     *            高度
     */
    public static final void gen(final String content, final String destPath, int width, int height) throws Exception {
        gen(content, new File(destPath), width, height);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param destPath
     *            目的文件路径
     * @param logoPath
     *            中间logo文件路径
     */
    public static final void gen(final String content, final String destPath, final String logoPath) throws Exception {
        gen(content, destPath, logoPath, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    /**
     * 生成二维码
     * 
     * @param content
     *            二维码文本内容
     * @param destPath
     *            目的文件路径
     * @param logoPath
     *            中间logo文件路径
     * @param width
     *            宽度
     * @param height
     *            高度
     */
    public static final void gen(final String content, final String destPath,
            final String logoPath, int width, int height) throws Exception {
        File foo = new File(destPath);
        File bar = new File(logoPath);
        gen(content, foo, bar, width, height);
    }

    /**
     * 解析二维码
     * 
     * @param input
     *            二维码输入流
     */
    public static final String parse(InputStream input) throws Exception {
        Reader reader = null;
        BufferedImage image;
        try {
            image = ImageIO.read(input);
            if (image == null) {
                throw new Exception("cannot read image from inputstream.");
            }
            final LuminanceSource source = new BufferedImageLuminanceSource(image);
            final BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            final Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();
            hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
            // 解码设置编码方式为:utf-8,
            reader = new MultiFormatReader();
            return reader.decode(bitmap, hints).getText();
        } catch (IOException e) {
            e.printStackTrace();
            throw new Exception("parse QR code error: ", e);
        } catch (ReaderException e) {
            e.printStackTrace();
            throw new Exception("parse QR code error: ", e);
        }
    }

    /**
     * 解析二维码
     * 
     * @param url
     *            二维码url
     */
    public static final String parse(URL url) throws Exception {
        InputStream in = null;
        try {
            in = url.openStream();
            return parse(in);
        } catch (IOException e) {
            e.printStackTrace();
            throw new Exception("parse QR code error: ", e);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }

    /**
     * 解析二维码
     * 
     * @param file
     *            二维码图片文件
     */
    public static final String parse(File file) throws Exception {
        InputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(file));
            return parse(in);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new Exception("parse QR code error: ", e);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }

    /**
     * 解析二维码
     * 
     * @param filePath
     *            二维码图片文件路径
     */
    public static final String parse(String filePath) throws Exception {
        InputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(filePath));
            return parse(in);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new Exception("parse QR code error: ", e);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }
}




MatrixToImageWriterEx.java 源码:

import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

class MatrixToImageWriterEx {

    private static final MatrixToLogoImageConfig DEFAULT_CONFIG = new MatrixToLogoImageConfig();

    /**
     * 根据内容生成二维码数据
     * 
     * @param content
     *            二维码文字内容[为了信息安全性,一般都要先进行数据加密]
     * @param width
     *            二维码照片宽度
     * @param height
     *            二维码照片高度
     * @param errorCorrectionLevel
     *            纠错等级
     * @return a {@link com.google.zxing.common.BitMatrix} object.
     * @since 0.0.7
     */
    public static BitMatrix createQRCode(String content, int width, int height,
            ErrorCorrectionLevel errorCorrectionLevel) {
        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
        // 设置字符编码
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 指定纠错等级
        hints.put(EncodeHintType.ERROR_CORRECTION, errorCorrectionLevel);
        BitMatrix matrix = null;
        try {
            matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return matrix;
    }

    /**
     * 根据内容生成二维码数据
     * 
     * @param content
     *            二维码文字内容[为了信息安全性,一般都要先进行数据加密]
     * @param width
     *            二维码照片宽度
     * @param height
     *            二维码照片高度
     * @return a {@link com.google.zxing.common.BitMatrix} object.
     * @since 0.0.7
     */
    public static BitMatrix createQRCode(String content, int width, int height) {
        return createQRCode(content, width, height, ErrorCorrectionLevel.H);
    }

    /**
     * 写入二维码、以及将照片logo写入二维码中
     * 
     * @param matrix
     *            要写入的二维码
     * @param format
     *            二维码照片格式
     * @param imagePath
     *            二维码照片保存路径
     * @param logoPath
     *            logo路径
     * @throws java.io.IOException
     *             if any.
     * @since 0.0.7
     */
    public static void writeToFile(BitMatrix matrix, String format,
            String imagePath, String logoPath) throws IOException {
        InputStream input = null;
        try {
            input = new BufferedInputStream(new FileInputStream(logoPath));
            writeToFile(matrix, format, imagePath, input);
        } catch (IOException e) {
            throw e;
        } finally {
            IOUtils.closeQuietly(input);
        }

    }

    /**
     * <p>
     * writeToFile.
     * </p>
     * 
     * @param matrix
     *            a {@link com.google.zxing.common.BitMatrix} object.
     * @param format
     *            a {@link java.lang.String} object.
     * @param imagePath
     *            a {@link java.lang.String} object.
     * @param logoInputStream
     *            a {@link java.io.InputStream} object.
     * @throws java.io.IOException
     *             if any.
     * @since 0.0.7
     */
    public static void writeToFile(BitMatrix matrix, String format,
            String imagePath, InputStream logoInputStream) throws IOException {
        MatrixToImageWriter.writeToPath(matrix, format, new File(imagePath).toPath(), new MatrixToImageConfig());
        // 添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象
        BufferedImage img = ImageIO.read(new File(imagePath));
        MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoInputStream, DEFAULT_CONFIG);
    }

    /**
     * 写入二维码、以及将照片logo写入二维码中
     * 
     * @param matrix
     *            要写入的二维码
     * @param format
     *            二维码照片格式
     * @param imagePath
     *            二维码照片保存路径
     * @param logoPath
     *            logo路径
     * @param logoConfig
     *            logo配置对象
     * @throws java.io.IOException
     *             if any.
     * @since 0.0.7
     */
    public static void writeToFile(BitMatrix matrix, String format, String imagePath, InputStream logoPath,
            MatrixToLogoImageConfig logoConfig) throws IOException {
        MatrixToImageWriter.writeToPath(matrix, format, new File(imagePath).toPath(), new MatrixToImageConfig());
        // 添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象
        BufferedImage img = ImageIO.read(new File(imagePath));
        MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, logoConfig);
    }

    /**
     * 将照片logo添加到二维码中间
     * 
     * @param image
     *            生成的二维码照片对象
     * @param imagePath
     *            照片保存路径
     * @param imagePath
     *            照片保存路径
     * @param imagePath
     *            照片保存路径
     * @param imagePath
     *            照片保存路径
     * @param imagePath
     *            照片保存路径
     * @param imagePath
     *            照片保存路径
     * @param logoInputStream
     *            logo输入流
     * @param formate
     *            照片格式
     * @param logoConfig
     *            a {@link cn.yicha.commons.qrcode.MatrixToLogoImageConfig}
     *            object.
     * @since 0.0.7
     */
    public static void overlapImage(BufferedImage image, String formate,
            String imagePath, InputStream logoInputStream,
            MatrixToLogoImageConfig logoConfig) {
        try {
            BufferedImage logo = ImageIO.read(logoInputStream);
            Graphics2D g = image.createGraphics();
            // 考虑到logo照片贴到二维码中,建议大小不要超过二维码的1/5;
            int width = image.getWidth() / logoConfig.getLogoPart();
            int height = image.getHeight() / logoConfig.getLogoPart();
            // logo起始位置,此目的是为logo居中显示
            int x = (image.getWidth() - width) / 2;
            int y = (image.getHeight() - height) / 2;
            // 绘制图
            g.drawImage(logo, x, y, width, height, null);

            // 给logo画边框
            // 构造一个具有指定线条宽度以及 cap 和 join 风格的默认值的实心 BasicStroke
            g.setStroke(new BasicStroke(logoConfig.getBorder()));
            g.setColor(logoConfig.getBorderColor());
            g.drawRect(x, y, width, height);

            g.dispose();
            // 写入logo照片到二维码
            ImageIO.write(image, formate, new File(imagePath));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

MatrixToLogoImageConfig.java 源码:

import java.awt.Color;

class MatrixToLogoImageConfig {
    // logo默认边框颜色
    /** Constant <code>DEFAULT_BORDERCOLOR</code> */
    public static final Color DEFAULT_BORDERCOLOR = Color.RED;
    // logo默认边框宽度
    /** Constant <code>DEFAULT_BORDER=2</code> */
    public static final int DEFAULT_BORDER = 2;
    // logo大小默认为照片的1/5
    /** Constant <code>DEFAULT_LOGOPART=5</code> */
    public static final int DEFAULT_LOGOPART = 5;

    private final int border = DEFAULT_BORDER;
    private final Color borderColor;
    private final int logoPart;

    /**
     * Creates a default config with on color {@link #BLACK} and off color
     * {@link #WHITE}, generating normal black-on-white barcodes.
     * 
     * @since 0.0.7
     */
    public MatrixToLogoImageConfig() {
        this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);
    }

    /**
     * <p>
     * Constructor for MatrixToLogoImageConfig.
     * </p>
     * 
     * @param borderColor
     *            a {@link java.awt.Color} object.
     * @param logoPart
     *            a int.
     * @since 0.0.7
     */
    public MatrixToLogoImageConfig(Color borderColor, int logoPart) {
        this.borderColor = borderColor;
        this.logoPart = logoPart;
    }

    /**
     * <p>
     * Getter for the field <code>borderColor</code>.
     * </p>
     * 
     * @return a {@link java.awt.Color} object.
     * @since 0.0.7
     */
    public Color getBorderColor() {
        return borderColor;
    }

    /**
     * <p>
     * Getter for the field <code>border</code>.
     * </p>
     * 
     * @return a int.
     * @since 0.0.7
     */
    public int getBorder() {
        return border;
    }

    /**
     * <p>
     * Getter for the field <code>logoPart</code>.
     * </p>
     * 
     * @return a int.
     * @since 0.0.7
     */
    public int getLogoPart() {
        return logoPart;
    }
}

 

   

      文章转载地址:http://www.cnblogs.com/zhoubang521/p/5200118.html

© 著作权归作者所有

共有 人打赏支持
jin_6868
粉丝 3
博文 29
码字总数 23338
作品 0
杭州
程序员
Java实现带logo的二维码

Java实现带logo的二维码 二维码应用到生活的各个方面,会用代码实现二维码,我想一定是一项加分的技能。好了,我们来一起实现一下吧。 我们实现的二维码是基于QR Code的标准的,QR Code是由日...

奇迹迪 ⋅ 05/28 ⋅ 0

使用zxing工具包创建和解析二维码

关于二维码是什么,以及二维码是如何生成的,我也没有研究得很深入,就不多说了,以免误导大家。请参看: java 二维码原理以及用java实现的二维码的生成、解码 二维码的生成细节和原理 下面是...

摆渡者 ⋅ 2015/09/06 ⋅ 0

利用iText和zxing生成和读pdf417二维码

前面的一些博文中已经提到了zxing这个开源工具生成和读取二维码图片,仅从学习的角度来看,可以告一个段落。在实际的生产环境中,应用zxing生成和读取二维码,却存在一些问题: 使用扫描枪读...

彭苏云 ⋅ 2014/03/06 ⋅ 0

AI 时代,爱学习的程序员都关注了这些…

这篇文章推荐了包括技术、设计、极客相关的热门公众号。

p5deyt322jacs ⋅ 01/07 ⋅ 0

zxing生成解析二维码以及二维码生成解析的一个Android应用程序

二维码技术不是什么新技术了,但是这几天工作用到,然后才现学习现使用,使用的是Google的ZXing,使用起来很简单, 我练习的两种方式,一种的简单的javase工程,一种是Android客户端生成解析...

Mysoft ⋅ 2015/11/13 ⋅ 0

Andoid开发中生成二维码

第一步: 确定我们二维码的位置,即是在我们应用的哪个页面的哪个位置,简单讲就是用一个ImageView把二维码展示出来,我们就把二维码展示在下面布局activity_main.xml中的ImageView上: 第二...

放纵的青春 ⋅ 2015/07/22 ⋅ 0

值得关注的 13 个技术类微信公众号

分享一下 13 个不错的技术类微信公众号。其中有最受欢迎的热门公众号、也有专注某个技术的公众号,涵盖 Java、Python、Android、iOS、Web前端、PHP、C/C++、.NET、Linux和数据库等技术和开发...

可爱的程序媛 ⋅ 2015/03/12 ⋅ 17

两种生成带logo二维码的开发总结

一、使用的类库 1、phpqrcode(php库) 2、qrcode.js(javascript库) 二、phpqrcode的使用 只用php的类库,也就是二维码的生成在后台操作。因为要在后台生成带logo的二维码,那么首先必须将...

许家瑞 ⋅ 2016/04/05 ⋅ 10

雨翔河/ScanLogin

手机扫一扫登录 服务器生成uuid和uuid为内容的二维码,同时生成一个全局的hashMap,key为uuid,value为登录信息,现在为空。 浏览器得到服务器传过来的uuid和二维码的同时发起轮询操作,问服...

雨翔河 ⋅ 2015/04/29 ⋅ 0

求讲解一下二维码生成原理

以前没有接触过二维码,想知道二维码是怎么生成的,原理是什么,代码怎么写。工具类都有哪些,谢谢各路大神了

ITBenson ⋅ 2014/10/21 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 28分钟前 ⋅ 2

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 52分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 57分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部