手机版

百科生活 投稿

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

百科 2025-12-28 07:46:06 投稿 阅读:5032次

关于【群名字有创意好听】,好听的群名字有创意,今天小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

  • 内容导航:
  • 1、Java IO 基础知识总结(精准详细)
  • 2、群名字有创意好听:好听的群名字有创意

1、Java IO 基础知识总结(精准详细)

IO 流简介

IO 即 Input/Output ,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在 Java 中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。

Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。

  • InputStream/Reader : 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
  • OutputStream/Writer : 所有输出流的基类,前者是字节输出流,后者是字符输出流。

字节流

InputStream(字节输入流)

InputStream用于从源头(通常是文件)读取数据(字节信息)到内存中,java.io.InputStream抽象类是所有字节输入流的父类。

InputStream 常用方法 :

  • read() :返回输入流中下一个字节的数据。返回的值介于 0 到 255 之间。如果未读取任何字节,则代码返回 -1,表示文件结束。
  • read(byteb[ ])bb-1b.lengthread(b, 0, b.length)
  • read(byteb[],intoff,intlen) read(byte b[ ]) off len
  • skip(long n) :忽略输入流中的 n 个字节 ,返回实际忽略的字节数。
  • available():返回输入流中可以读取的字节数。
  • close():关闭输入流释放相关的系统资源。

从 Java 9 开始, InputStream新增加了多个实用的方法:

  • readAllBytes():读取输入流中的所有字节,返回字节数组。
  • readNBytes(byte[] b, int off, int len):阻塞直到读取len个字节。
  • transferTo(OutputStream out):将所有字节从一个输入流传递到一个输出流。

FileInputStream是一个比较常用的字节输入流对象,可直接指定文件路径,可以直接读取单字节数据,也可以读取至字节数组中。

FileInputStream代码示例:

try (InputStream fis = new FileInputStream("input.txt")) { System.out.println("Number of remaining bytes:" + fis.available()); int content; long skip = fis.skip(2); System.out.println("The actual number of bytes skipped:" + skip); System.out.print("The content read from file:"); while ((content = fis.read()) != -1) { System.out.print((char) content); }} catch (IOException e) { e.printStackTrace();}

input.txt文件内容:

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

输出:

Number of remaining bytes:11The actual number of bytes skipped:2The content read from file:JavaGuide

不过,一般我们是不会直接单独使用FileInputStream,通常会配合BufferedInputStream(字节缓冲输入流,后文会讲到)来使用。

像下面这段代码在我们的项目中就比较常见,我们通过readAllBytes()读取输入流所有字节并将其直接赋值给一个String对象。

// 新建一个 BufferedInputStream 对象BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("input.txt"));// 读取文件的内容并复制到 String 对象中String result = new String(bufferedInputStream.readAllBytes());System.out.println(result);

DataInputStream用于读取指定类型数据,不能单独使用,必须结合FileInputStream。

FileInputStream fileInputStream = new FileInputStream("input.txt");//必须将fileInputStream作为构造参数才能使用DataInputStream dataInputStream = new DataInputStream(fileInputStream);//可以读取任意具体的类型数据dataInputStream.readBoolean();dataInputStream.readInt();dataInputStream.readUTF();

ObjectInputStream 用于从输入流中读取 Java 对象(反序列化), ObjectOutputStream用于将对象写入到输出流(序列化)。

ObjectInputStream input = new ObjectInputStream(new FileInputStream("object.data"));MyClass object = (MyClass) input.readObject();input.close();

另外,用于序列化和反序列化的类必须实现Serializable接口,对象中如果有属性不想被序列化,使用transient修饰。

OutputStream(字节输出流)

OutputStream用于将数据(字节信息)写入到目的地(通常是文件),java.io.OutputStream抽象类是所有字节输出流的父类。

OutputStream 常用方法 :

  • write(int b):将特定字节写入输出流。
  • write(byte b[ ]) b write(b,0, b.length)
  • write(byte[] b, intoff,intlen) write(byte b[ ]) off len
  • flush():刷新此输出流并强制写出所有缓冲的输出字节。
  • close():关闭输出流释放相关的系统资源。

FileOutputStream是最常用的字节输出流对象,可直接指定文件路径,可以直接输出单字节数据,也可以输出指定的字节数组。

FileOutputStream代码示例:

try (FileOutputStream output = new FileOutputStream("output.txt")) { byte[] array = "JavaGuide".getBytes(); output.write(array);} catch (IOException e) { e.printStackTrace();}

运行结果:

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

类似于FileInputStream,FileOutputStream通常也会配合BufferedOutputStream(字节缓冲输出流,后文会讲到)来使用。

FileOutputStream fileOutputStream = new FileOutputStream("output.txt");BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream)

DataOutputStream用于写入指定类型数据,不能单独使用,必须结合FileOutputStream

// 输出流FileOutputStream fileOutputStream = new FileOutputStream("out.txt");DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);// 输出任意数据类型dataOutputStream.writeBoolean(true);dataOutputStream.writeByte(1);

ObjectOutputStream 用于从输入流中读取 Java 对象( ObjectInputStream,反序列化)或者将对象写入到输出流(ObjectOutputStream,序列化)。

ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("file.txt")Person person = new Person("Guide哥", "JavaGuide作者");output.writeObject(person);

字符流

不管是文件读写还是网络发送接收,信息的最小存储单元都是字节。 那为什么 I/O 流操作要分为字节流操作和字符流操作呢?

个人认为主要有两点原因:

  • 字符流是由 Java 虚拟机将字节转换得到的,这个过程还算是比较耗时。
  • 如果我们不知道编码类型就很容易出现乱码问题。

乱码问题这个很容易就可以复现,我们只需要将上面提到的FileInputStream代码示例中的input.txt文件内容改为中文即可,原代码不需要改动。

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

输出:

Number of remaining bytes:9The actual number of bytes skipped:2The content read from file:§å®¶å¥½

可以很明显地看到读取出来的内容已经变成了乱码。

因此,I/O 流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。

字符流默认采用的是Unicode编码,我们可以通过构造方法自定义编码。顺便分享一下之前遇到的笔试题:常用字符编码所占字节数?utf8 :英文占 1 字节,中文占 3 字节, unicode :任何字符都占 2 个字节, gbk :英文占 1 字节,中文占 2 字节。

Reader(字符输入流)

Reader用于从源头(通常是文件)读取数据(字符信息)到内存中,java.io.Reader抽象类是所有字符输入流的父类。

Reader用于读取文本,InputStream用于读取原始字节。

Reader 常用方法 :

  • read() : 从输入流读取一个字符。
  • read(char[] cbuf) cbuf read(cbuf,0, cbuf.length)
  • read(char[] cbuf, intoff,intlen)read(char[] cbuf) off len
  • skip(long n) :忽略输入流中的 n 个字符 ,返回实际忽略的字符数。
  • close() : 关闭输入流并释放相关的系统资源。

InputStreamReader是字节流转换为字符流的桥梁,其子类FileReader是基于该基础上的封装,可以直接操作字符文件。

// 字节流转换为字符流的桥梁public class InputStreamReader extends Reader {}// 用于读取字符文件public class FileReader extends InputStreamReader {}

FileReader代码示例:

try (FileReader fileReader = new FileReader("input.txt");) { int content; long skip = fileReader.skip(3); System.out.println("The actual number of bytes skipped:" + skip); System.out.print("The content read from file:"); while ((content = fileReader.read()) != -1) { System.out.print((char) content); }} catch (IOException e) { e.printStackTrace();}

input.txt文件内容:

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

输出:

The actual number of bytes skipped:3The content read from file:我是Guide。

Writer(字符输出流)

Writer用于将数据(字符信息)写入到目的地(通常是文件),java.io.Writer抽象类是所有字节输出流的父类。

Writer 常用方法 :

  • write(int c) : 写入单个字符。
  • write(char[] cbuf) cbuf write(cbuf,0, cbuf.length)
  • write(char[] cbuf, intoff,intlen)write(char[] cbuf) off len
  • write(String str):写入字符串,等价于write(str, 0, str.length())。
  • write(Stringstr,intoff,intlen) write(String str) off len
  • append(CharSequence csq) Writer Writer
  • append(char c) Writer Writer
  • flush():刷新此输出流并强制写出所有缓冲的输出字符。
  • close():关闭输出流释放相关的系统资源。

OutputStreamWriter是字符流转换为字节流的桥梁,其子类FileWriter是基于该基础上的封装,可以直接将字符写入到文件。

// 字符流转换为字节流的桥梁public class InputStreamReader extends Reader {}// 用于写入字符到文件public class FileWriter extends OutputStreamWriter {}

FileWriter代码示例:

try (Writer output = new FileWriter("output.txt")) { output.write("你好,我是Guide。");} catch (IOException e) { e.printStackTrace();}

输出结果:

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

字节缓冲流

IO 操作是很消耗性能的,缓冲流将数据加载至缓冲区,一次性读取/写入多个字节,从而避免频繁的 IO 操作,提高流的传输效率。

字节缓冲流这里采用了装饰器模式来增强InputStream和OutputStream子类对象的功能。

举个例子,我们可以通过BufferedInputStream(字节缓冲输入流)来增强FileInputStream的功能。

// 新建一个 BufferedInputStream 对象BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("input.txt"));

字节流和字节缓冲流的性能差别主要体现在我们使用两者的时候都是调用write(int b)和read() 这两个一次只读取一个字节的方法的时候。由于字节缓冲流内部有缓冲区(字节数组),因此,字节缓冲流会先将读取到的字节存放在缓存区,大幅减少 IO 次数,提高读取效率。

我使用write(int b)和read()方法,分别通过字节流和字节缓冲流复制一个524.9 mb 的 PDF 文件耗时对比如下:

使用缓冲流复制PDF文件总耗时:15428 毫秒使用普通字节流复制PDF文件总耗时:2555062 毫秒

两者耗时差别非常大,缓冲流耗费的时间是字节流的 1/165。

测试代码如下:

@Testvoid copy_pdf_to_another_pdf_buffer_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("深入理解计算机操作系统.pdf")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("深入理解计算机操作系统-副本.pdf"))) { int content; while ((content = bis.read()) != -1) { bos.write(content); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用缓冲流复制PDF文件总耗时:" + (end - start) + " 毫秒");}@Testvoid copy_pdf_to_another_pdf_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (FileInputStream fis = new FileInputStream("深入理解计算机操作系统.pdf"); FileOutputStream fos = new FileOutputStream("深入理解计算机操作系统-副本.pdf")) { int content; while ((content = fis.read()) != -1) { fos.write(content); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用普通流复制PDF文件总耗时:" + (end - start) + " 毫秒");}

如果是调用read(byte b[])和write(byte b[], int off, int len)这两个写入一个字节数组的方法的话,只要字节数组的大小合适,两者的性能差距其实不大,基本可以忽略。

这次我们使用read(byte b[])和write(byte b[], int off, int len) 方法,分别通过字节流和字节缓冲流复制一个 524.9 mb 的 PDF 文件耗时对比如下:

使用缓冲流复制PDF文件总耗时:695 毫秒使用普通字节流复制PDF文件总耗时:989 毫秒

两者耗时差别不是很大,缓冲流的性能要略微好一点点。

测试代码如下:

@Testvoid copy_pdf_to_another_pdf_with_byte_array_buffer_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("深入理解计算机操作系统.pdf")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("深入理解计算机操作系统-副本.pdf"))) { int len; byte[] bytes = new byte[4 * 1024]; while ((len = bis.read(bytes)) != -1) { bos.write(bytes, 0, len); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用缓冲流复制PDF文件总耗时:" + (end - start) + " 毫秒");}@Testvoid copy_pdf_to_another_pdf_with_byte_array_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (FileInputStream fis = new FileInputStream("深入理解计算机操作系统.pdf"); FileOutputStream fos = new FileOutputStream("深入理解计算机操作系统-副本.pdf")) { int len; byte[] bytes = new byte[4 * 1024]; while ((len = fis.read(bytes)) != -1) { fos.write(bytes, 0, len); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用普通流复制PDF文件总耗时:" + (end - start) + " 毫秒");}

BufferedInputStream(字节缓冲输入流)

BufferedInputStream 从源头(通常是文件)读取数据(字节信息)到内存的过程中不会一个字节一个字节的读取,而是会先将读取到的字节存放在缓存区,并从内部缓冲区中单独读取字节。这样大幅减少了 IO 次数,提高了读取效率。

BufferedInputStream内部维护了一个缓冲区,这个缓冲区实际就是一个字节数组,通过阅读BufferedInputStream源码即可得到这个结论。

publicclass BufferedInputStream extends FilterInputStream { // 内部缓冲区数组 protected volatile byte buf[]; // 缓冲区的默认大小 private static int DEFAULT_BUFFER_SIZE = 8192; // 使用默认的缓冲区大小 public BufferedInputStream(InputStream in) { this(in, DEFAULT_BUFFER_SIZE); } // 自定义缓冲区大小 public BufferedInputStream(InputStream in, int size) { super(in); if (size <= 0) { throw new IllegalArgumentException("Buffer size <= 0"); } buf = new byte[size]; }}

缓冲区的大小默认为8192字节,当然了,你也可以通过BufferedInputStream(InputStream in, int size)这个构造方法来指定缓冲区的大小。

BufferedOutputStream(字节缓冲输出流)

BufferedOutputStream 将数据(字节信息)写入到目的地(通常是文件)的过程中不会一个字节一个字节的写入,而是会先将要写入的字节存放在缓存区,并从内部缓冲区中单独写入字节。这样大幅减少了 IO 次数,提高了读取效率

try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) { byte[] array = "JavaGuide".getBytes(); bos.write(array);} catch (IOException e) { e.printStackTrace();}

类似于BufferedInputStream,BufferedOutputStream内部也维护了一个缓冲区,并且,这个缓存区的大小也是8192字节。

字符缓冲流

BufferedReader(字符缓冲输入流)和BufferedWriter(字符缓冲输出流)类似于BufferedInputStream(字节缓冲输入流)和BufferedOutputStream(字节缓冲输入流),内部都维护了一个字节数组作为缓冲区。不过,前者主要是用来操作字符信息。

打印流

下面这段代码大家经常使用吧?

System.out.print("Hello!");System.out.println("Hello!");

System.out实际是用于获取一个PrintStream对象,print方法实际调用的是PrintStream对象的write方法。

PrintStream属于字节打印流,与之对应的是PrintWriter(字符打印流)。PrintStream是OutputStream的子类,PrintWriter是Writer的子类。

public class PrintStream extends FilterOutputStream implements Appendable, Closeable {}public class PrintWriter extends Writer {}

随机访问流

这里要介绍的随机访问流指的是支持随意跳转到文件的任意位置进行读写的RandomAccessFile。

RandomAccessFile的构造方法如下,我们可以指定mode(读写模式)。

// openAndDelete 参数默认为 false 表示打开文件并且这个文件不会被删除public RandomAccessFile(File file, String mode) throws FileNotFoundException { this(file, mode, false);}// 私有方法private RandomAccessFile(File file, String mode, boolean openAndDelete) throws FileNotFoundException{ // 省略大部分代码}

读写模式主要有下面四种:

  • r : 只读模式。
  • rw : 读写模式
  • rws rw rws
  • rwd rw rwd

文件内容指的是文件中实际保存的数据,元数据则是用来描述文件属性比如文件的大小信息、创建和修改时间。

RandomAccessFile中有一个文件指针用来表示下一个将要被写入或者读取的字节所处的位置。我们可以通过RandomAccessFile的seek(long pos)方法来设置文件指针的偏移量(距文件开头pos个字节处)。如果想要获取文件指针当前的位置的话,可以使用getFilePointer()方法。

RandomAccessFile代码示例:

RandomAccessFile randomAccessFile = new RandomAccessFile(new File("input.txt"), "rw");System.out.println("读取之前的偏移量:" + randomAccessFile.getFilePointer() + ",当前读取到的字符" + (char) randomAccessFile.read() + ",读取之后的偏移量:" + randomAccessFile.getFilePointer());// 指针当前偏移量为 6randomAccessFile.seek(6);System.out.println("读取之前的偏移量:" + randomAccessFile.getFilePointer() + ",当前读取到的字符" + (char) randomAccessFile.read() + ",读取之后的偏移量:" + randomAccessFile.getFilePointer());// 从偏移量 7 的位置开始往后写入字节数据randomAccessFile.write(new byte[]{'H', 'I', 'J', 'K'});// 指针当前偏移量为 0,回到起始位置randomAccessFile.seek(0);System.out.println("读取之前的偏移量:" + randomAccessFile.getFilePointer() + ",当前读取到的字符" + (char) randomAccessFile.read() + ",读取之后的偏移量:" + randomAccessFile.getFilePointer());

input.txt文件内容:

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

输出:

读取之前的偏移量:0,当前读取到的字符A,读取之后的偏移量:1读取之前的偏移量:6,当前读取到的字符G,读取之后的偏移量:7读取之前的偏移量:0,当前读取到的字符A,读取之后的偏移量:1

input.txt文件内容变为ABCDEFGHIJK。

RandomAccessFile的write方法在写入对象的时候如果对应的位置已经有数据的话,会将其覆盖掉。

RandomAccessFile randomAccessFile = new RandomAccessFile(new File("input.txt"), "rw");randomAccessFile.write(new byte[]{'H', 'I', 'J', 'K'});

假设运行上面这段程序之前input.txt文件内容变为ABCD,运行之后则变为HIJK。

RandomAccessFile比较常见的一个应用就是实现大文件的断点续传。何谓断点续传?简单来说就是上传文件中途暂停或失败(比如遇到网络问题)之后,不需要重新上传,只需要上传那些未成功上传的文件分片即可。分片(先将文件切分成多个文件分片)上传是断点续传的基础。

RandomAccessFile可以帮助我们合并文件分片,示例代码如下:

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

我在《Java 面试指北》中详细介绍了大文件的上传问题。

群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)

RandomAccessFile的实现依赖于FileDescriptor (文件描述符) 和 FileChannel(内存映射文件)。

·········· END ··············

2、群名字有创意好听:好听的群名字有创意

好听的群名字有创意

好听的群名字有创意:1、欢乐丶在明天2、五月花男神群3、辣鸡的自我修养4、家有儿女初长成5、朵法拉天舞台6、欢乐家族7、仙女下凡8、今世有缘之家9、有爱的小南国10、那寔峩们旳地盘11、吊炸天12、老王家的全家福13、最强伐木军团14、童年时关15、懵懂的我们16、不祥三宝17、三菜一汤18、春花苑19、转身欢乐20、除了我都是猪21、重温青春的记忆22、小公举们23、亲情一家聊24、为找男冤家而妥协25、的修仙传奇26、明家大会堂27、有家人的地方很暖28、书香世家29、为啊伐木累30、相亲相爱一家人

建群名称大全 好听有创意的群名字

1、钟爱美食联盟 2、沙雕集团 3、有福同享有难退群 4、爱之梦家庭群 5、戏精学院 6、天南地北永不离 7、懒懒的一家人 8、游走的灵魂 9、杠精艺术交流会 10、魔法城堡的仙女们 11、长沙富婆俱乐部 12、精神病病友交流群 13、欢喜同堂 14、美少女集中营 15、花果山第一小分队 16、非人类研究中心 17、稳住必赢群 18、永瘦宫 19、开心姐妹群 20、仙女俱乐部 21、乱室佳人 22、全体脱单 23、大洞村同村缘 24、逆袭小分队 25、老干部修仙中心 26、这里是冷宫 27、未来富婆高级养生会所 28、名门望族 29、精神病的托儿所 30、泡面辣条研究所

有创意的群名称

1、延禧宫。2、一根藤上四个瓜。

3、兄弟姐妹。

4、11的家。5、少女天团。6、挫折太多。7、中国少年先疯队。

8、有一千度电的。9、皇亲国戚。10、轩辕逆天。

11、六大村花。12、秃头小姐妹。13、新港西路名媛。

14、安徽凤阳小岗村。15、F天团。16、光阴逆流。

17、恭喜发财。18、美少女集中营。19、美们快来看啊。20、哄我开心。

21、防秃头阵线。22、成都钢化脑壳。23、同福客栈。24、人丑安全。

25、深夜放毒群。26、未来的大神们。27、颓废青年交流群。28、魔仙堡。

29、夏日火热。30、灵魂剑客。31、佩琪养老院。

32、开心一家人。33、单身狗保护协会。34、家园群。

35、妖夜米岚。36、我和三条狗。37、猛男妙妙屋。38、劳资最烦起名了。

39、我就是我。40、四大金刚。41、XXX后宫群。

42、你得不到的女人们。43、席卷他城。44、纯天然学渣。45、作业是个老油条。

46、梦已成殇。47、官方小可爱。48、年预计脱贫成员。

49、轻云望月。50、美少女俱。

本文关键词:好听的群名字有创意团队,好听的群名字有创意家庭,好听的群名字有创意女生,三个人好听的群名字有创意,好听的群名字有创意姐妹。这就是关于《群名字有创意好听,好听的群名字有创意(基础知识总结<精准详细>)》的所有内容,希望对您能有所帮助!

本文链接:https://bk.89qw.com/a-758913

最近发表
网站分类