الطبقة العامة FileCoper {
السلسلة النهائية الثابتة الخاصة _ORIGIN_FILE_MODE = "r"؛
السلسلة النهائية الثابتة الخاصة _TARGET_FILE_MODE = "rw";
وقت طويل ثابت خاص 1 = 0l؛
سلسلة OriginFileName الخاصة؛
سلسلة خاصة اسم الملف المستهدف؛
RandomAccessFile الخاص OriginFile؛
ملف الهدف RandomAccessFile الخاص؛
عدد الصفحات الخاص int ؛
int الخاص الثابت TotalThreadCount = 0;
عدد صحيح ثابت خاص تم تنفيذه = 0 ؛
ملف عام () {
this.threadCount = 1;
TotalThreadCount = this.threadCount;
}
public FileCoper(String OriginFile, String targetFile) {
يحاول {
this.originFileName = OriginFile;
this.targetFileName = targetFile;
this.originFile = new RandomAccessFile((originFile), FileCoper._ORIGIN_FILE_MODE);
this.targetFile = new RandomAccessFile((targetFile), FileCoper._TARGET_FILE_MODE);
this.threadCount = 1;
TotalThreadCount = this.threadCount;
} قبض على (FileNotFoundException ه) {
printStackTrace();
}
}
public FileCoper(String OriginFile, String targetFile, int threadCount) {
يحاول {
this.originFileName = OriginFile;
this.targetFileName = targetFile;
this.originFile = new RandomAccessFile((originFile), FileCoper._ORIGIN_FILE_MODE);
this.targetFile = new RandomAccessFile((targetFile), FileCoper._TARGET_FILE_MODE);
this.threadCount = 1;
TotalThreadCount = this.threadCount;
} قبض على (FileNotFoundException ه) {
printStackTrace();
}
}
init الفراغ العام (String OriginFile، String targetFile) يطرح الاستثناء {
this.originFileName = OriginFile;
this.targetFileName = targetFile;
this.originFile = new RandomAccessFile((originFile), FileCoper._ORIGIN_FILE_MODE);
this.targetFile = new RandomAccessFile((targetFile), FileCoper._TARGET_FILE_MODE);
this.threadCount = 1;
TotalThreadCount = this.threadCount;
}
init الفراغ العام (String OriginFile، String targetFile، int threadCount) يطرح استثناء {
this.originFileName = OriginFile;
this.targetFileName = targetFile;
this.originFile = new RandomAccessFile((originFile), FileCoper._ORIGIN_FILE_MODE);
this.targetFile = new RandomAccessFile((targetFile), FileCoper._TARGET_FILE_MODE);
this.threadCount = threadCount;
TotalThreadCount = this.threadCount;
}
الحرف الأول الفراغي العام (RandomAccessFile OriginFile، RandomAccessFile targetFile) يطرح استثناء {
this.originFile = OriginFile;
this.targetFile = targetFile;
this.threadCount = 1;
TotalThreadCount = this.threadCount;
}
الحرف الأول الفراغي العام (RandomAccessFile OriginFile، RandomAccessFile targetFile، int threadCount) يطرح استثناء {
this.originFile = OriginFile;
this.targetFile = targetFile;
this.threadCount = threadCount;
TotalThreadCount = this.threadCount;
}
إنهاء الفراغ المتزامن الثابت العام () {
FileCoper.executedCount ++;
System.out.println("النسخة الأصلية[" + FileCoper.totalThreadCount + "], نسخة الويندوز 【" + FileCoper.executedCount + "]النسخة الأصلية!!!");
إذا (FileCoper.totalThreadCount == FileCoper.executedCount){
long time2 = System.currentTimeMillis();
System.out.println("الإجابة على السؤال:"+(time2-time1));
System.out.println("البيانات الرسمية[" + FileCoper.totalThreadCount + "]الرقم التسلسلي للعنوان!!!");
}
}
بداية الفراغ العام () يلقي استثناء {
إذا (this.originFile.length() == 0)
يعود؛
إذا (this.threadCount == 0)
this.threadCount = 1;
// 置目标文件大小
this.targetFile.setLength(this.originFile. length());
this.targetFile.seek(0);
this.originFile.seek(0);
time1 = System.currentTimeMillis();
System.out.println(this.originFile. length());
// اسم المنتج
long[][] Splits = new long[this.threadCount][2];
long OriginFileLength = this.originFile. length();
int startPos = 0;
for (int i = 0; i < this.threadCount; i++) {
الانقسامات[i][0] = 0;
الانقسامات[i] [1] = 0؛
إذا (ط == 0) {
الانقسامات[i][0] = 0;
Splits[i][1] = OriginFileLength / this.threadCount;
} وإلا إذا (i == this.threadCount - 1) {
// الاسم: أفضل ما في الأمر 1، أفضل 1، أفضل ما في الأمر
// Splits[i][0] = startPos + 1;
Splits[i][0] = startPos;
Splits[i][1] = OriginFileLength;
} آخر {
// الاسم: أفضل ما في الأمر 1، أفضل 1، أفضل ما في الأمر
// Splits[i][0] = startPos + 1;
Splits[i][0] = startPos;
Splits[i][1] = startPos + OriginFileLength / this.threadCount;
}
startPos += OriginFileLength / this.threadCount;
// System.out.println(splits[i][0] + " " + Splits[i][1]);
Coper fc = new Coper("thread-" + i);
fc.init(this.originFile, this.targetFile, Splits[i][0], Splits[i][1]);
fc.setOriginFileName(this.originFileName);
fc.setTargetFileName(this.targetFileName);
fc.start();
}
}
بداية الفراغ العام New() يلقي استثناء {
إذا (this.originFile.length() == 0)
يعود؛
// 置目标文件大小
this.targetFile.setLength(this.originFile. length());
this.targetFile.seek(0);
this.originFile.seek(0);
موقف بداية طويلة؛
موقف نهاية طويلة؛
كتلة طويلة = this.originFile. length() / 1029;
إذا (كتلة <= 1)
this.threadCount = 1;
for (int i = 0; i < this.threadCount; i++) {
// معلومات عنا
startPosition = i * 1029 * (block / this.threadCount);
endPosition = (i + 1) * 1029 * (block / this.threadCount);
إذا (i == (this.threadCount - 1))
endPosition = this.originFile. length();
Coper fc = new Coper("thread-" + i);
fc.init(this.originFile, this.targetFile, startPosition, endPosition);
fc.setOriginFileName(this.originFileName);
fc.setTargetFileName(this.targetFileName);
fc.start();
}
}
فئة خاصة كوبر تمتد الموضوع {
سلسلة OriginFileName الخاصة؛
سلسلة خاصة اسم الملف المستهدف؛
RandomAccessFile الخاص OriginFile؛
ملف الهدف RandomAccessFile الخاص؛
معرف سلسلة خاص ؛
موقف بداية طويلة خاصة؛
موقف طويل خاص؛
سعة الكتلة الطويلة الخاصة؛
public void setOriginFileName(String OriginFileName) {
this.originFileName = OriginFileName;
}
public void setTargetFileName(String targetFileName) {
this.targetFileName = targetFileName;
}
كوبر العامة (سلسلة مؤشر الترابط) {
this.threadId = threadId;
}
init الفراغ العام (RandomAccessFile OriginFile، RandomAccessFile targetFile، long startPosition، long endPosition) يطرح استثناء {
this.originFile = OriginFile;
this.targetFile = targetFile;
this.startPosition = startPosition;
this.endPosition = endPosition;
this.blockCapacity = this.endPosition - this.startPosition;
}
تشغيل الفراغ العام () {
// System.out.println(this.threadId + "الاتصال بالرقم التسلسلي للموقع[" +
// this.originFileName + "】中的文件块【" + this.startPosition + "،" +
// this.endPosition + "】到目标文件【" + this.targetFileName + "】中...");
متزامن (this.originFile) {
يحاول {
// تحديد موعد التسليم
عدد النسخ الدولي = 0;
// تحديد موعد التسليم
long offSet = this.startPosition;
بايت[] ب = بايت جديد[16 * 1024 * 1024]؛
// الحصول على معلومات حول ما يجب القيام به
حجم الكتلة الطويلة = 0؛
بينما (copyCount < this.blockCapacity) {
this.originFile.seek(offSet);
إذا (this.blockCapacity - CopyCount > 16 * 1024 * 1024)
حجم الكتلة = 16 * 1024 * 1024؛
آخر
blockSize = this.blockCapacity - CopyCount;
إذا (blockSize > this.blockCapacity - CopyCount)
blockSize = this.blockCapacity - CopyCount;
int count = this.originFile.read(b, 0, (int) blockSize);
متزامن (هذا.targetFile) {
يحاول {
إذا (عدد النسخ == 0)
this.targetFile.seek(offSet);
آخر
this.targetFile.seek(offSet + 1);
this.targetFile.write(b, 0, count);
} قبض (IOException ه) {
printStackTrace();
}
}
// 增加拷贝的字节数
CopyCount += count;
// 拷贝其实(偏移量下移)
offSet += count;
}
} قبض (IOException ه) {
printStackTrace();
}
}
// System.out.println(this.threadId + "اسم الملف الأصلي" + this.originFileName
// + "】中的文件块【" + this.startPosition + ""، + this.endPosition +
// "] اسم الملف [" + this.targetFileName + "] اسم الملف!");
// إنشاء موقع جديد، إنشاء موقع جديد
FileCoper.finish();
}
}
public static void main(String[] args) يطرح الاستثناء {
FileCoper fc = new FileCoper();
fc.init("e:/InitialData_zhihuan.sql", "e:/InitialData_zhihuan2.sql", 30);
//fc.init("d:/ValueAdd_11.txt", "d:/ValueAdd_111.txt", 100);
// fc.init("D:/tools/music/做你的爱人.mp3", "d:/tools/music/做你的爱人.mp3", "d:/做你的爱人_5.mp3", 10);
//fc.init("E:/电影/最黑暗侵袭.rmvb", "d:/最黑暗侵袭_1.rmvb", 100);
/* // 读入键盘输入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 文件来源
سلسلة أصل الملف؛
// 文件目标
سلسلة الهدف الملف؛
System.out.println("[التفاصيل، 目标文件، 线程数]");
System.out.print("تم تحديد اسم المستخدم:");
OriginFile = br.readLine();
System.out.print("تم تحديد اسم المستخدم:");
targetFile = br.readLine();
System.out.print("النسخة الأصلية:");
int threadCount = Integer.parseInt(br.readLine());
fc.init(originFile, targetFile, threadCount);*/
// fc.startNew();
long time1 = System.currentTimeMillis();
fc.start();
long time2 = System.currentTimeMillis();
System.out.println(time2-time1);
}
}